В понедельник основной участник WordPress Джонатан Десрозье опубликовал подробный пост в блоге Make WordPress Core о предстоящем выпуске PHP 8 и его влиянии на WordPress.
PHP 8 скоро появится
Запланированный к выпуску 26 ноября 2020 года PHP 8 – следующее крупное обновление нашего любимого языка сценариев. Хотя предыдущие выпуски PHP не оказали слишком большого негативного влияния на экосистему WordPress, это обновление содержит некоторые критические изменения, которые могут повлиять на обратную совместимость. Также следует отметить, что многие функции, которые были объявлены устаревшими в PHP 7.x, теперь будут удалены в PHP 8.
Статус ядра WordPress
В своем посте Дерозье освещает работу, проделанную для обновления основного программного обеспечения. «WordPress Core стремится быть совместимым с PHP 8.0 в версии 5.6 (в настоящее время запланированной на 8 декабря 2020 г.)», – написал он.
Однако это не означает, что после выпуска WordPress 5.6 безопасно перейти на PHP 8. WordPress редко запускается сам по себе и обычно использует по крайней мере одну тему и набор плагинов для работы в качестве блога или веб-сайта. По сути, он отмечает: «Состояние поддержки PHP 8 в более широкой экосистеме (плагины, темы и т. д.) Невозможно узнать. По этой причине WordPress 5.6 следует считать «бета-совместимой» с PHP 8 . «
По сути, это означает, что до тех пор, пока большинство основных тем и плагинов не будут совместимы с PHP 8, WordPress не может считаться полностью совместимым.
Узнайте, как PHP 8 может повлиять на ваш плагин или тему
Такие компании, как Yoast, уже некоторое время готовятся к этому. В конце октября технический директор Yoast Омар Рейсс вместе с другими участниками Джульеттой Рейндерс Фолмер , разработчиком программы сниффов стандартов кодирования WordPress для PHPCS , и менеджером Yoast DevOps Херре Гроеном составили и опубликовали подробный отчет о совместимости WordPress / PHP 8 .
Хотя я настоятельно рекомендую вам найти время, чтобы прочитать весь отчет, в нем изложена основная причина, по которой обновление PHP 8 может оказать такое сильное влияние на крупные сайты WordPress, особенно на экосистему плагинов и тем.
«Однако версии PHP 7. * претерпели гораздо больший набор устаревших рекомендаций, чем предыдущие версии PHP. Если переход с PHP 5.6 на PHP 7 был относительно простым, то переход с 7.x на PHP 7 мог быть очень болезненным, особенно для очень старых кодовых баз, таких как WordPress и многие из доступных для него плагинов. Для хорошо типизированных кодовых баз или кодовых баз, которые оставались актуальными с последними версиями PHP, нет большой проблемы ».
Поскольку я сопровождаю несколько плагинов, некоторые из которых построены на восьмилетнем коде, меня беспокоит, что это обновление может привести к поломке сайтов.
Как подготовиться
Я спросил Рейсса и Фолмера, что разработчики плагинов и тем могут сделать, чтобы подготовиться, и они поделились некоторыми указателями.
Прежде всего, разработчики должны проинформировать себя об изменениях, которые появятся в PHP 8: прочтите публикацию Make о PHP 8 , прочтите отчет о совместимости Yoast PHP8 , прочтите раздел « Переход с PHP 7.4 на PHP 8.0 » руководства по PHP и, возможно, копайте глубже, прочитав документ UPGRADING в ветке PHP 8 и RFC для PHP 8 .
Некоторые доступные инструменты можно использовать для поиска несовместимости:
- Запустите PHP lint на PHP 8 поверх их кода, либо с помощью
php -l
команды (обязательно перебирая все файлы), либо с помощью PHP Parallel Lint . - Запустите PHPCompatibility по своему коду: следует отметить, что почти все сниффы, связанные с PHP 8, находятся в пока еще не выпущенной версии 10.0.0 PHPCompatibility, поэтому людям нужно будет использовать
develop
ветку или через Composerdev-develop
для пока не будет выпущена версия 10.0.0. - Запустите модульные / интеграционные тесты для плагина или темы на PHP 8 и исправьте все, что появляется как ошибка. Это часто означает, что сначала необходимо сделать набор тестов совместимым с PHPUnit 9.3+. Пакет PHPUnit Polyfills и пакет WP Test Utils (оба опубликованы в рамках организации Yoast GitHub) могут помочь в этом. Также важно отметить, что для обеспечения надежности необходимо значительное количество тестов.
- Запустите модульные тесты WordPress и тесты WordPress e2e с активированным плагином и исправьте любые возникающие проблемы.
- Проверьте, достаточно ли (строгое) покрытие кода указанных тестов, а если нет, добавьте больше тестов, убедившись, что покрыты как счастливые, так и несчастливые пути.
- Если тестов нет, протестируйте все вручную, уделяя особое внимание «несчастливым путям», и ожидайте получения отчетов об ошибках в обозримом будущем. В то же время, вероятно, сейчас самое время заняться внедрением модульных / интеграционных тестов для вашего плагина или темы.
Время еще есть, но оно уходит
Как Дерозье указал в публикации Make, WordPress официально стремится быть готовым к PHP 8 только к моменту выпуска 5.6 в начале декабря. Потенциально это означает, что многие хостинговые компании, ориентированные на WordPress, будут рассматривать возможность предложения обновлений своим клиентам только после того, как ядро WordPress станет совместимым. У нас, как у разработчиков плагинов и тем, есть время, чтобы протестировать наши продукты и подготовить их, но это окно быстро закрывается.
К счастью для нас, знания и инструменты для обновления доступны. Нам просто нужно привести их в действие.