Maison > développement back-end > tutoriel php > 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 » ?

Susan Sarandon
Libérer: 2025-01-03 17:27:43
original
932 Les gens l'ont consulté

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

Dans cet exemple, l'avertissement est déclenché car la méthode find() 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());
Copier après la connexion

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

Ce code génère un avertissement de normes strictes car le 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);
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