Considere el siguiente código:
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());
Esto generará el siguiente resultado:
Strict Standards: Only variables should be passed by reference in test.php on line 14
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
La razón? El método test::get_arr()
no es una variable y en modo estricto esto generará una advertencia. Este comportamiento es extremadamente no intuitivo ya que el método get_arr()
devuelve un valor de matriz.
Para solucionar este error en modo estricto, ya sea cambiar la firma del método para que no se utilice una referencia:
function test_arr($a) {
var_dump($a);
}
Como no se puede cambiar la firma de array_shift
también se puede utilizar una variable intermedia:
$inter= get_arr();
$el= array_shift($inter);
¿Qué devuelve $ instance-> find (..)? –
Aquí está la solución: http://stackoverflow.com/questions/9848295/strict-standards-only-variables-should-be-passed-by-reference-error – ajaristi
Creo que los ejemplos (o lógica) podrían ser al revés en la pregunta, dado que el segundo ejemplo (función 'get_arr()') ** produce ** el aviso de estándares estrictos (probado PHP 5.2 y PHP 5.5). – MrWhite