Fatal error: Call-time pass-by-reference has been removed

May 02, 2015 00:16


Каждое новое обновление серверного программного обеспечения - это упражнение из области «и хочется, и колется…». Так и я решил наконец-таки устаревающий PHP5.2 оставить в прошлом (ведь он не умеет работать с многими новомодными плюшками), и перейти на PHP5.4.

Таким образом был обновлен PHP на одном из боевых серверов (с полутора дясятком разного рода сайтов). Реакция клиентов не заставила себя долго ждать, и сразу посыпались жалобы на поломанный в разных местах функционал.

Расскажу об одной из причин, вдруг кому-то пригодится.

Выполнение некоторых участков кода заваливалось с ошибкой «Fatal error: Call-time pass-by-reference has been removed in … «.

Оказалось, что новый PHP не разрешает использовать ссылку (&$arg) в вызове функции. К слову, PHP и раньше мог ругаться на такую конструкцию, правда всего-лишь на уровне Warning’ов. Новый PHP оказался строже, отдавая Fatal error при выполнении.

В это же время использование ссылки на аргумент в объявлении функции допускается и приветствуется.

Резюмирую.

Стоит избегать конструкций:

1
myFunc($arg1, &$arg2);
А использовать:

1
function myFunc($arg1, &$arg2) {} Это сообщение опубликованно в моём основном блоге. Вы можете комментировать как и тут, так и напрямую под сообщением в блоге.

php

Previous post Next post
Up