Consultez 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 va générer 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? La méthode test::get_arr()
n'est pas une variable et en mode strict cela va générer un avertissement. Ce comportement est extrêmement non intuitif car la méthode get_arr()
renvoie une valeur de tableau.
Pour contourner cette erreur en mode strict, soit changer la signature de la méthode de sorte qu'il n'utilise une référence:
function test_arr($a) {
var_dump($a);
}
Puisque vous ne pouvez pas changer la signature de array_shift
vous pouvez également utiliser un variable intermédiaire:
$inter= get_arr();
$el= array_shift($inter);
Que retourne $ instance-> find (..)? –
Voici la solution: http://stackoverflow.com/questions/9848295/strict-standards-only-variables-should-be-passed-by-reference-error – ajaristi
Je pense que les exemples (ou la logique) pourraient être à l'envers dans la question, puisque le deuxième exemple (fonction 'get_arr()') ** produit ** l'avis de normes strictes (testé PHP 5.2 et PHP 5.5). – MrWhite