Сообщение об ошибке «Строгие стандарты: только переменные должны передаваться по ссылке»
При использовании array_shift() может сообщаться о строгих стандартах предупреждение, если переданный аргумент является результатом вызова функции. Такое поведение кажется непоследовательным, поскольку оно не всегда вызывает предупреждение.
Рассмотрим следующий код:
$el = array_shift($instance->find(..))
В этом примере выдается предупреждение, поскольку метод find() не является переменной. Однако следующий код не выдает предупреждение:
function get_arr(){ return array(1, 2); } $el = array_shift(get_arr());
Чтобы понять это поведение, давайте проанализируем другой фрагмент кода:
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());
Этот код генерирует строгое стандартное предупреждение, поскольку метод $t->get_arr() не является переменной и передается по ссылке. Такое поведение противоречит здравому смыслу, поскольку метод возвращает значение массива.
Чтобы избежать этой ошибки в строгом режиме, либо измените сигнатуру метода, чтобы избежать использования ссылки, либо используйте промежуточную переменную:
function test_arr($a) { var_dump($a); } $inter = get_arr(); $el = array_shift($inter);
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3