Обновление до PHP 5.3 с отключенным предупреждением об устаревших функциях

Я очень хочу обновить ряд наших серверов до PHP 5.3. Это будет готово для Zend Framework 2, а также для очевидных обновлений производительности. К сожалению, у меня есть большое количество устаревшего кода на этих серверах, который со временем будет исправлен, но не может быть исправлен до миграции. Я рассматриваю возможность обновления, но отключения ошибки устаревшей функции на всех сайтах разработки, кроме нескольких, где я могу начать работу, обновив старый код.

error_reporting(E_ALL ^ E_DEPRECATED);

Есть ли какая-то фундаментальная причина, по которой это было бы плохой идеей?


person robjmills    schedule 05.11.2010    source источник


Ответы (3)


Если вы еще этого не сделали, прочтите руководство по миграции, уделив особое внимание Обратно несовместимые изменения и Удаленные расширения.

У вас есть проблемы посерьезнее, чем устаревание. Игнорирования E_DEPRECATED недостаточно. Из-за несовместимых изменений также будут другие типы ошибок или, что еще хуже, неожиданное поведение.

Вот простой пример:

<?php
function goto($line){
    echo $line;
}
goto(7);
?>

Этот код будет работать нормально и выводить 7 в PHP 5.2.x, но выдаст ошибку синтаксического анализа в PHP 5.3.x.

Что вам нужно сделать, так это взять каждый пункт этого руководства, проверить свой код и обновить его там, где это необходимо. Чтобы сделать это быстрее, вы можете игнорировать устаревшую функциональность на первом этапе и просто отключить отчеты об ошибках для E_DEPRECATED, но вы не можете предполагать, что при переносе на другую основную ветку PHP вы получите только несколько безобидных предупреждений. .

Также не забывайте о своем взломе и исправьте устаревшие проблемы как можно скорее.

С уважением,
Алин

Примечание. Я пытался ответить на вопрос с практической точки зрения, поэтому, пожалуйста, не говорите мне, что игнорирование предупреждений — это плохо. Я знаю это, но я также знаю, что время не бесконечный ресурс.

person Alin Purcaru    schedule 05.11.2010

Ну, вы можете забыть, что установили флаг, и задаться вопросом, почему ваше приложение ломается при следующем обновлении PHP. Отладка приложения без надлежащего отчета об ошибках может быть очень неприятной. Это одна из причин, о которой я могу думать.

Однако, если вы это сделаете, задокументируйте это где-нибудь. Это может сэкономить вам пару часов, прежде чем вы вообще вспомните об установке флага.

person TheGrandWazoo    schedule 05.11.2010
comment
Как только эти устаревшие функции будут удалены из PHP, код, использующий их, начнет выдавать E_WARNING или фатальные ошибки, так что это будет сложно пропустить ;) - person Mchl; 05.11.2010
comment
Прикольно, я этого не знал :). Спасибо за обмен. - person TheGrandWazoo; 05.11.2010

Я полагаю, у вас есть какой-то тестовый сервер? Если нет, вам действительно следует настроить его и протестировать свой код в PHP 5.3. Если ваш код тщательно протестирован, его тестирование займет несколько секунд, и его исправление также будет довольно быстрым, поскольку модульные тесты подскажут вам, где именно искать. Если нет, то подумайте о том, чтобы сделать модульное тестирование приоритетом перед следующим выпуском, а тем временем пройдите все это, сначала с отключенными E_DEPRECATED предупреждениями и исправьте все, что появляется, а затем снова включите его, как только у вас будет время. Вы также можете запустить глобальный поиск и замену, чтобы упростить исправление ошибок.

person Nathan MacInnes    schedule 05.11.2010