Назначение возвращаемого значения new по ссылке было deprecated в 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
?
Я подозреваю, что это будет работать очень хорошо, но ищет краевые случаи, где я могу столкнуться с проблемами. Да, я знаю, что могу просто изменить настройки отчетов об ошибках. Но я не хочу скрывать уведомления, я хочу их исправить.