Maison >développement back-end >tutoriel php >Pourquoi PHP émet-il des avertissements « Seules les variables doivent être transmises par référence » et comment peuvent-ils être résolus ?
En PHP, l'avertissement des normes strictes "Seules les variables doivent être transmises par référence" se déclenche lorsqu'on tente de transmettre une non-variable par référence à une fonction ou une méthode.
Considérez le code suivant :
$el = array_shift($instance->find());
Ce code génère un avertissement de normes strictes car $instance->find() renvoie un tableau, qui n'est pas une variable. Lorsqu'il est passé en argument, il tente de passer le tableau par référence (à l'aide de l'opérateur &), ce qui déclenche l'avertissement.
Cependant, dans le code suivant :
function get_arr(){ return array(1, 2); } $el = array_shift(get_arr());
Les normes strictes l'avertissement n'est pas signalé car get_arr() est une fonction qui renvoie un tableau. Par conséquent, il est traité comme une variable plutôt que comme une simple valeur de tableau.
L'avertissement des normes strictes se produit spécifiquement dans les situations où une méthode ou une fonction est appelée et sa valeur de retour est passé par référence. Par exemple, considérons le code suivant :
class test { function test_arr(&$a) { var_dump($a); } function get_arr() { return array(1, 2); } } $t = new test; $t->test_arr($t->get_arr());
Dans ce code, l'avertissement de normes strictes est généré car $t->get_arr() renvoie un tableau, qui n'est pas une variable. Cependant, il est passé par référence à la méthode test_arr à l'aide de l'opérateur &.
Pour résoudre l'avertissement de normes strictes, il existe deux approches possibles :
function test_arr($a) { var_dump($a); }
$inter = $instance->find(); $el = array_shift($inter);
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!