Considérons le code suivant:
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());
Cela génère la sortie suivante:
Strict Standards: Only variables should be passed by reference in test.php on line 14
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
La raison? L' test::get_arr()
méthode n'est pas une variable et en vertu de la mode strict, cela va générer un message d'avertissement. Ce comportement est extrêmement intuitif, comme l' get_arr()
méthode retourne un tableau de valeur.
Pour contourner cette erreur en mode strict, soit de changer la signature de la méthode afin de ne pas utiliser une référence:
function test_arr($a) {
var_dump($a);
}
Puisque vous ne pouvez pas modifier la signature d' array_shift
vous pouvez aussi utiliser une variable intermédiaire:
$inter= get_arr();
$el= array_shift($inter);