Рассмотрим следующий код:
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());
Будет сгенерирован следующий вывод:
Strict Standards: Only variables should be passed by reference in `test.php` on line 14
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
причина? Метод test::get_arr()
не является переменной и в строгом режиме генерирует предупреждение. Такое поведение крайне неинтуитивно, поскольку метод get_arr()
возвращает значение массива.
Чтобы обойти эту ошибку в строгом режиме, либо измените сигнатуру метода, чтобы он не использовал ссылку:
function test_arr($a) {
var_dump($a);
}
Поскольку вы не можете изменить подпись array_shift
, вы также можете использовать промежуточную переменную:
$inter= get_arr();
$el= array_shift($inter);