PHP 8.4 и старый код — на что чаще всего натыкаюсь
Кто обновлял проекты с PHP 7 или 8.0 на 8.4, тот знает: код старый не всегда просто заводится. Самое частое — это устаревшие функции, которые теперь вызывают предупреждения или ошибки. Например, некоторые конструкции типа присваивания в условии, последний разрабатываемый строгий режим типов и новые предупреждения о неявных преобразованиях.
Первое, что я делаю — запускаю проект с включённым отображением всех ошибок и предупреждений (error_reporting = E_ALL). Бывает, что старый код использует deprecated-функции, которые в 8.4 уже явно ругаются. Их проще всего быстро заменить — обычно для каждой есть обновлённый аналог или более современный способ.
Второй момент — типы. Типизация в PHP 8.4 стала строже, иногда код ломается из-за неполадок в типах аргументов или возвращаемых значениях. Тут помогает ревизия функций и их объявлений. Если код всё же устаревший, приходится либо приводить всё к корректным типам, либо временно снижать строгие проверки.
Если проект большой, то простой way — запустить анализатор кода, например, PHPStan. Он быстро покажет, где код не соответствует новым правилам.
Наконец, некоторые старые расширения или сторонний софт может не работать как раньше. Тут уже либо обновлять зависимости, если возможно, либо, если нет, задумываться о рефакторинге или откате до старой версии PHP.
Кто ещё обновлял свои проекты до 8.4? Какие ловушки сам нашёл?