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]