Opened 4 weeks ago
Closed 3 weeks ago
#62845 closed defect (bug) (duplicate)
Deprecated: str_replace() - Passing null as $subject in PHP 8.x
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | |
Component: | General | Keywords: | dev-feedback |
Focuses: | administration, template, php-compatibility | Cc: |
Description (last modified by )
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
- Installer WordPress sur un environnement local ou un serveur exécutant PHP 8.2.
- Activer le mode débogage dans
wp-config.php
:define('WP_DEBUG', true); define('WP_DEBUG_DISPLAY', true);
- Naviguer vers une page d'administration ou effectuer une action utilisant
wp-includes/functions.php
. - 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 :
- Appliquer le correctif dans les versions futures de WordPress.
- Identifier et corriger toutes les occurrences similaires dans le code source de WordPress.
- Ajouter des tests automatisés pour détecter les valeurs null passées à des fonctions incompatibles avec PHP 8.2.
Attachments (1)
Change History (4)
#2
@
4 weeks ago
Since it is documented that $path must be a string, it's wrong to just silence out such error from the caller. Either the function should emit an error, throw exception itself, or let str_replace
handle it.
If some code calls a function with incorrect parameters, an error must be expected. If not serious errors may happen somewhere without being noticed.
To avoid the error message, fix the code calling it with bad parameters.
file corrected