Назначение возвращаемого значения new по ссылке устарело в PHP 5.3. Таким образом,
$obj =& new Foo();
теперь выдает ошибку E_DEPRECATED
.
При обновлении большого приложения с большим количеством устаревшего кода до версии 5.3 это приводит к большому количеству нежелательных уведомлений.
В качестве потенциального решения этой проблемы я рассматриваю возможность использования регулярного выражения для поиска и замены всех экземпляров =& new
на = new
. Например, следующее найдет все файлы PHP и уничтожит все экземпляры =& new
:
find ./ -name '*.php' | xargs perl -p -i -e 's/=(\s*)&(\s*)?new\b/= new/g'
Ищем ответы на следующие вопросы:
- Будет ли это работать нормально? С какими потенциальными проблемами я могу столкнуться?
- Если нет, примеры кода, где замена
=& new
на = new
изменит поведение в PHP 5.3.
- Известно, что любые примеры популярных библиотек с этим могут вызвать проблемы.
- Какие еще идеи вы порекомендуете для исправления огромного количества
=& new
?
Я подозреваю, что это будет хорошо работать, но я ищу крайние случаи, когда у меня могут возникнуть проблемы. Да, я знаю, что могу просто изменить настройки отчетов об ошибках. Но я не хочу скрывать уведомления, я хочу их исправить.