- GitHub - rectorphp/rector: Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
- Instant Upgrades and Automated Refactoring of any PHP 5.3+ code - rectorphp/rector
Текст, переведенный ИИ.
Резюме публикации от ИИ durumis
- В этом руководстве мы рассмотрим, как использовать инструмент обновления PHP версий Rector для миграции кода PHP 5.3 на PHP 7.4.
- После установки Composer установите Rector в свой проект и настройте файл rector.php, указав код, подлежащий обновлению, и целевую версию PHP.
- Настройка и запуск правил модификации позволит автоматически изменить код, а отслеживание изменений с помощью Git обеспечит безопасное обновление.
Просматривая сайт на Gnuboard5, который является корейской CMS на PHP, я наткнулся на несколько постов, в которых пользователи жаловались на трудности, возникшие после обновления версии PHP из-за устаревшей грамматики и версий.
Ища решение, я...
нашёл на Reddit информацию о инструменте Rector, который помогает с миграцией, и решил поделиться с вами его использованием.
После выхода PHP 7.0 в 2015 году появились инструменты для миграции PHP, такие как php cs-fixer, rector и другие.
Rector, на мой взгляд, более удобен в использовании.
Rector (произносится как «Ректор») проверяет код PHP версий от 5.3 до 8.2 на соответствие заданной версии и исправляет синтаксические ошибки.
К сожалению, Rector — это статический анализатор, поэтому он не может обнаруживать ошибки, возникающие во время выполнения.
Для работы Rector необходим Composer — менеджер пакетов PHP.
1. Установите Composer.
2. Установите Rector в папку текущего проекта.
3. Создайте файл конфигурации rector.php.
Настройка rector.php
Для лучшего понимания давайте определим ситуацию.
Предположим, что исходный код написан на PHP 5.3, а цель миграции — PHP 7.4. Мы будем использовать эту ситуацию для примера.
Версия Rector — 1.0.3.
RectorConfig::config() настраивает папку с исходным кодом и версию PHP.
Функция withPhpSets задаёт набор функций PHP, которые необходимо обновить.
Если версия PHP, на которой выполняется Rector, — PHP 8.0,
можно задать нужную версию PHP таким образом.
Однако, если версия PHP, на которой выполняется Rector, — PHP 7.4 или ниже
нельзя использовать синтаксис именованных параметров в функциях, поэтому true нужно устанавливать в соответствии с нужной версией.
Rector поддерживает PHP 8.3, поэтому для указания PHP 7.4 необходимо сделать следующее:
->withPaths([
__DIR__ , // Директория, в которой находится rector.php.
])
Укажите правила и папки, которые не нужно применять.
Для папок используйте '/имя_папки/*'.
Для файлов — 'имя_файла'.
Я добавил правило "SensitiveConstantNameRector".
Rector не может найти undefined index в массивах PHP и воспринимает их как константы, пытаясь неправильно изменить код. Поэтому я добавил его в список исключений.
Эти правила относятся к стилю кода, поэтому я исключил их.
Выполнение
Есть два варианта.
Эта команда только выведет в консоль список кода, который нужно изменить.
Чем больше исходного кода, тем больше оперативной памяти требуется, поэтому используйте опцию --memory-limit=2G для задания лимита используемой памяти.
Эта команда сразу же изменит исходный код.
Так как опций очень много, возможно, будут применены нежелательные опции, поэтому необходимо использовать Git для отслеживания изменений.