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() 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 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);
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!