Рассмотрим следующий код:
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);