Normes strictes : Comprendre l'avertissement « Seules les variables doivent être transmises par référence »
En PHP, le mode strict applique certaines pratiques de programmation pour améliorer qualité et cohérence du code. Une de ces pratiques consiste à éviter de transmettre des valeurs non variables par référence. Cette question explore les raisons de cet avertissement et propose des solutions pour l'éviter.
Le problème : paramètres de référence et valeurs de retour
Considérez l'extrait de code suivant :
$el = array_shift($instance->find(..))
Ce code déclenche l'avertissement de normes strictes "Seules les variables doivent être transmises par référence." Cependant, ce n'est pas le cas du code suivant :
function get_arr(){ return array(1, 2); } $el = array_shift(get_arr());
Pour comprendre ce comportement, nous devons nous plonger dans la gestion des références de PHP. Lorsqu'une référence est transmise à une fonction, toutes les modifications apportées à la variable référencée par ce paramètre sont reflétées dans la variable d'origine. Dans le premier extrait de code, $instance->find(...) renvoie un tableau, qui n'est pas une variable. Passer ce tableau par référence déclenche l'avertissement.
Comprendre l'exception
Cependant, cette exception peut être trompeuse. Dans le deuxième extrait de code, la fonction get_arr() renvoie un tableau, ce qui implique qu'une référence peut lui être transmise. Cependant, la fonction elle-même n'utilise pas de paramètre de référence, donc l'avertissement est évité.
Solutions pour éviter l'avertissement
Pour éliminer l'avertissement, il existe deux options :
Exemple :
function get_arr(){ return array(1, 2); } $inter = get_arr(); $el = array_shift($inter);
En utilisant la variable intermédiaire $inter, on évite de passer la valeur de retour de get_arr() directement par référence, résolvant l'avertissement de normes strictes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!