[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