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á la siguiente salida:
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 test::get_arr()
método no es una variable y en modo estricto esto generará una advertencia. Este comportamiento es extremadamente no intuitivo ya que el get_arr()
método devuelve un valor de matriz.
Para evitar este error en modo estricto, cambie la firma del método para que no use una referencia:
function test_arr($a) {
var_dump($a);
}
Como no puede cambiar la firma de array_shift
, también puede usar una variable intermedia:
$inter = get_arr();
$el = array_shift($inter);