«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `array_shift()` вызывает «строгие стандарты: только переменные должны передаваться по ссылке»?

Почему `array_shift()` вызывает «строгие стандарты: только переменные должны передаваться по ссылке»?

Опубликовано 21 декабря 2024 г.
Просматривать:762

Why Does `array_shift()` Trigger

Сообщение об ошибке «Строгие стандарты: только переменные должны передаваться по ссылке»

При использовании 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