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

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

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

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

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

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

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

Резюмирую.

Стоит избегать конструкций:
[code type=php]myFunc($arg1, &$arg2);[/code]

А использовать:
[code type=php]function myFunc($arg1, &$arg2) {}[/code]

Share