"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi `array_shift()` déclenche-t-il des « normes strictes : seules les variables doivent être transmises par référence » ?

Pourquoi `array_shift()` déclenche-t-il des « normes strictes : seules les variables doivent être transmises par référence » ?

Publié le 2024-12-21
Parcourir:258

Why Does `array_shift()` Trigger

Message d'erreur "Normes strictes : seules les variables doivent être transmises par référence"

Lors de l'utilisation de array_shift(), il peut signaler des normes strictes avertissement si l'argument passé est le résultat d'un appel de fonction. Ce comportement semble incohérent, car il ne déclenche pas toujours l'avertissement.

Considérez le code suivant :

$el = array_shift($instance->find(..))

Dans cet exemple, l'avertissement est déclenché car la méthode find() n'est pas une variable. Cependant, le code suivant ne produit pas d'avertissement :

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

Pour comprendre ce comportement, analysons un autre extrait de code :

error_reporting(E_STRICT);
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());

Ce code génère un avertissement de normes strictes car la méthode $t->get_arr() n'est pas une variable et est passée par référence. Ce comportement est contre-intuitif car la méthode renvoie une valeur de tableau.

Pour éviter cette erreur en mode strict, modifiez la signature de la méthode pour éviter d'utiliser une référence ou utilisez une variable intermédiaire :

function test_arr($a) {
    var_dump($a);
}

$inter = get_arr();
$el = array_shift($inter);
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3