[wp-trac] [WordPress Trac] #62845: Deprecated: str_replace() - Passing null as $subject in PHP 8.x

WordPress Trac noreply at wordpress.org
Wed Jan 22 23:21:19 UTC 2025


#62845: Deprecated: str_replace() - Passing null as $subject in PHP 8.x
-------------------------------------------------+-------------------------
 Reporter:  madum                                |      Owner:  (none)
     Type:  defect (bug)                         |     Status:  new
 Priority:  normal                               |  Milestone:  Awaiting
                                                 |  Review
Component:  General                              |    Version:  6.7.1
 Severity:  major                                |   Keywords:  dev-
  Focuses:  administration, template, php-       |  feedback
  compatibility                                  |
-------------------------------------------------+-------------------------
 Résumé du problème
 Lors de l'utilisation de PHP 8.2, une alerte "Deprecated" apparaît dans le
 fichier wp-includes/functions.php, à plusieurs endroits.

 L'alerte se produit parce que la fonction str_replace() reçoit une valeur
 null pour le paramètre $subject. Dans PHP 8.2, passer null à un paramètre
 attendu comme array|string génère une alerte de dépréciation.

 Étapes pour reproduire
 1. Installer WordPress sur un environnement local ou un serveur exécutant
 PHP 8.2.
 2. Activer le mode débogage dans wp-config.php :
    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', true);
 3. Naviguer vers une page d'administration ou effectuer une action
 utilisant wp-includes/functions.php.
 4. Observer le message d'erreur "Deprecated" dans les logs ou dans la
 sortie HTML.

 Message d'erreur exact
 Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type
 array|string is deprecated in wp-includes/functions.php on line 2189

 Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type
 array|string is deprecated in wp-includes/functions.php on line 1234
 (exemple pour un deuxième cas similaire)

 Corrections apportées
 Pour chaque occurrence de str_replace() recevant une variable qui pourrait
 être null, il est nécessaire de vérifier et d'initialiser la variable
 avant de l'utiliser.

 Correction pour la ligne 2189 :
 Bloc original :
 $haystack = str_replace( $needle, $replace, $haystack );

 Bloc corrigé avec numéros de ligne (2185-2191) :
 2185: if ( ! is_array( $haystack ) && ! is_string( $haystack ) ) {
 2186:     return $haystack;
 2187: }
 2188:
 2189: if ( null === $haystack ) {
 2190:     $haystack = ''; // Ou [] si nécessaire
 2191: }
 $haystack = str_replace( $needle, $replace, $haystack );

 Correction pour la ligne 1234 (autre occurrence) :
 Bloc original :
 $result = str_replace( $search, $replace, $subject );

 Bloc corrigé avec numéros de ligne (1230-1235) :
 1230: if ( null === $subject ) {
 1231:     $subject = ''; // Initialiser avec une chaîne vide
 1232: }
 1233:
 1234: $result = str_replace( $search, $replace, $subject );

 Impact
 Ces corrections garantissent la compatibilité avec PHP 8.2 en évitant les
 alertes "Deprecated". Elles ne modifient pas le comportement attendu des
 fonctions et améliorent la robustesse du code.

 Recommandation
 Pour résoudre ce problème de manière définitive :
 1. Appliquer le correctif dans les versions futures de WordPress.
 2. Identifier et corriger toutes les occurrences similaires dans le code
 source de WordPress.
 3. Ajouter des tests automatisés pour détecter les valeurs null passées à
 des fonctions incompatibles avec PHP 8.2.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/62845>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list