PHP 8.4 и старый код — где чаще всего проседает и что делать
Кто уже пробовал запускать старые проекты на PHP 8.4, может подтвердить — баги и баги. Вот что чаще ломается и как с этим бороться на практике:
1. Типы и типизация. PHP 8.4 усилил строгий режим, и если в старом коде переменные имеют неочевидные типы, появляются баги. Совет: пройтись статическим анализатором (phpstan или psalm), потом добавить типы в функции и свойства.
2. Deprecated-функции. Некоторые старые функции и способы работы уже не рекомендуются или закрыты. Вылетают предупреждения или ошибки. Пример – устаревшие методы класса DateTime или старые API для работы с компиляторами строк. Тут надо искать замену и переписывать.
3. Изменения в обработке null и bool. Устаревшие сравнения и проверки, которые раньше автоматически приводились к bool, теперь могут работать не так. Вывод — внимательнее с условными операторами, лучше прописывать явные проверки.
4. Ошибки с именованными аргументами. В 8+ появилась поддержка, и иногда старые вызовы с позиционными аргументами дают сбой, особенно если функцию улучшили с новыми обязательными параметрами.
5. Новые зарезервированные слова и синтаксис. Если в коде используются имена переменных или функций, которые теперь зарезервированы или новый синтаксис, скрипт может не запуститься. Переменные/функции придется переименовывать.
Не всё так однозначно, баги бывают, но далеко не всегда из-за строгой типизации или зарезервированных слов. Часто дело в том, что старый код был написан неаккуратно, и новая версия просто не прощает халтуры. Да, придётся кое-что подправить, но паниковать заранее нет смысла — со статическим анализатором и внимательным подходом многие проблемы решаются быстро.