1-й аргумент в 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'. Я думаю, что вам нужно статическая переменная вместо константы в этом случае.