PHP 8.4 и старый код: что ломается сразу и на что глядеть
Кто уже пробовал поднять старые проекты на PHP 8.4? Я собрал для себя пару моментов, которые обычно встают поперёк горла:
- Совсем другая работа с типами. Если в старом коде много неявных преобразований, стоит проверить вызовы функций и методы — там могут вылезти ошибки или предупреждения.
- Новые предупреждения и ошибки из-за устаревших функций. Например, mysql_* уже могут быть под вопросом, хотя давно пора мигрировать.
- Изменения в сплите строк и регулярках — иногда ломаются парсеры и разные explode/preg_match, особенно, если там был "творческий" код.
- Новые правила обработки ошибок и исключений — может быть больше фатальных ошибок, если старый код не ловит их.
- Конструкторы теперь строгие с наследованием — если у классов не совпадают сигнатуры, будут предупреждения.
- Тонкости с обработкой null и undefined переменных. Там, где раньше просто игнорировалось, теперь может критануть.
В общем, что я советую делать: прогонять весь проект через строгий режим с включённым error_reporting, ловить все предупреждения, запускать тесты (если есть). Плюс надо обновить зависимости, так как они тоже могут не дружить с 8.4.
А у кого какие приколы и баги с PHP 8.4? Кто что особенно ломал?
С PHP 8.4 реально много мелочей, которые ломают старый код, особенно из-за жёсткой типизации и новых правил ошибки. У меня падали участки с вызовами mysql_* и парсингом строк — старый код сработал не как ожидал. Включение полного error_reporting прямо спасло, так быстрее понимаешь, где глюки. Главное, не игнорировать предупреждения и тесты запускать чаще.