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 ?

Pourquoi PHP émet-il des avertissements « Seules les variables doivent être transmises par référence » et comment peuvent-ils être résolus ?

Mary-Kate Olsen
Libérer: 2025-01-03 22:46:42
original
741 Les gens l'ont consulté

Why Does PHP Issue

Comprendre l'avertissement des normes strictes : "Seules les variables doivent être transmises par référence"

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.

Explication du Comportement

Considérez le code suivant :

$el = array_shift($instance->find());
Copier après la connexion

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());
Copier après la connexion

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.

La cause profonde

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());
Copier après la connexion

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 &.

Résolution

Pour résoudre l'avertissement de normes strictes, il existe deux approches possibles :

  1. Modifier la signature de la méthode : Modifiez la signature de la méthode pour ne pas utiliser de paramètre de référence. Par exemple :
function test_arr($a) {
    var_dump($a);
}
Copier après la connexion
  1. Utiliser une variable intermédiaire : Créez une variable intermédiaire, attribuez-lui la valeur de retour de la méthode et transmettez la variable intermédiaire par référence. Par exemple :
$inter = $instance->find();
$el = array_shift($inter);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal