1-й аргумент в array_push принимает только переменную

array_push

У меня есть оператор PHP следующим образом (в методе класса)

array_push(self::USER_BASIC_DETAIL_FIELDS, 'cname_username');

что дает мне ошибку

 Cannot pass parameter 1 by reference

Затем я попытался назначить его переменной и все работало нормально.

$r = self::USER_BASIC_DETAIL_FIELDS;
array_push($r, 'cname_username');

Мой вопрос: почему PHP выдает ошибку в вышеуказанном случае? У меня есть ответ, но я не уверен, поэтому спросил здесь. Ответ:

array_push не возвращает измененный массив, но изменяет переменную, заданную в аргументе 1. Таким образом, изменения производятся в тех местах памяти, где хранится переменная (аргумент 1).

Если мы передаем аргумент 1 как self::USER_BASIC_DETAIL_FIELDS затем с тем же поведением array_push он попытается изменить константу USER_BASIC_DETAIL_FIELDS класса, который создаст беспорядок для разработчика

Я прав?

1 ответ

Ответ: все зависит от деталей вашего проекта.


Вы не можете изменить значение констант. И переменная '$r' не является указателем на 'self::USER_BASIC_DETAIL_FIELDS', а является копией 'self::USER_BASIC_DETAIL_FIELDS'. Я думаю, что вам нужно статическая переменная вместо константы в этом случае.

Другие вопросы по тегам