Это руководство содержит инструкции по настройке PHP_CodeSniffer с PHPCompatibility и Rector для анализа и обновления вашего PHP-кода для совместимости с PHP 8.0.
Этот контейнер предназначен для автоматического анализа и исправления кода PHP с целью обеспечения его совместимости с PHP 8.0. Мы используем PHP_CodeSniffer с PHPCompatibility для выявления проблем несовместимости и Rector для автоматического исправления кода.
- PHP_CodeSniffer: Анализатор кода, который помогает выявить проблемы со стилем и совместимостью.
- PHPCompatibility: Набор правил для PHP_CodeSniffer, позволяющий определить совместимость кода с различными версиями PHP, включая PHP 8.0.
- Rector: Инструмент для автоматического рефакторинга кода, который помогает исправлять проблемы совместимости и улучшать качество кода.
- Анализ кода: Проверка кода на наличие проблем совместимости с PHP 8.0.
- Автоматическое исправление: Автоматическое исправление выявленных проблем совместимости.
- Поддержка стандартов: Соблюдение современных стандартов кода и лучших практик.
-
Анализ кода на совместимость с PHP 8.0:
vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion=8.0 src/
-
Автоматическое исправление кода с помощью Rector:
vendor/bin/rector process src
- Экономия времени: Автоматизация процесса поиска и исправления проблем совместимости.
- Снижение рисков: Обеспечение плавного перехода на PHP 8.0 без ручного исправления множества файлов.
- Улучшение качества кода: Соблюдение современных стандартов кода и улучшение его качества.
Этот контейнер значительно упрощает процесс обновления и поддержания кода, делая его совместимым с новыми версиями PHP.
- PHP 7.2 или выше
- Composer
-
Клонируйте репозиторий (или создайте новый проект):
git clone <your-repo-url> cd <your-repo-directory>
-
Инициализируйте проект Composer (если еще не сделали это):
composer init
-
Установите PHP_CodeSniffer:
composer require --dev squizlabs/php_codesniffer
-
Установите PHPCompatibility:
composer require --dev phpcompatibility/php-compatibility
-
Настройте PHP_CodeSniffer для использования PHPCompatibility:
vendor/bin/phpcs --config-set installed_paths vendor/phpcompatibility/php-compatibility
-
Проверьте установленные стандарты:
vendor/bin/phpcs -i
Вы должны увидеть
PHPCompatibility
в списке установленных стандартов. -
Установите Rector:
composer require rector/rector --dev
- Создайте файл конфигурации
rector.php
в корневой директории вашего проекта со следующим содержанием:<?php declare(strict_types=1); use Rector\Config\RectorConfig; use Rector\Php74\Rector\FuncCall\CreateFunctionToAnonymousFunctionRector; use Rector\Set\ValueObject\SetList; return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ __DIR__ . '/src', ]); $rectorConfig->rules([ CreateFunctionToAnonymousFunctionRector::class, // Добавьте больше правил здесь, если необходимо ]); $rectorConfig->sets([ SetList::PHP_80, SetList::CODE_QUALITY, SetList::DEAD_CODE, SetList::TYPE_DECLARATION, SetList::EARLY_RETURN, ]); };
-
Создайте тестовый PHP-файл в
src/test.php
для анализа:<?php // Пример использования create_function $func = create_function('$a, $b', 'return $a + $b;'); echo $func(1, 2); // Использование list() с переменными list($a, $b) = [1, 2]; // Использование each() $array = [1, 2, 3]; while (list($key, $val) = each($array)) { echo "$key => $val\n"; } // Использование функции mbstring без обязательных аргументов echo mb_strpos('foo', 'o'); // Использование глобальных переменных без указания глобального контекста function foo() { $GLOBALS['bar'] = 'baz'; } foo(); echo $bar; // Использование зарезервированного имени (PHP 7.4+) class String { public function toString() { return "Это строка"; } } $obj = new String(); echo $obj->toString(); // Использование функций с типами, несовместимыми с PHP 8.0 function sum(int $a, int $b) { return $a + $b; } echo sum('1', '2'); // Использование assert() без скобок assert 1 == 1; // Использование устаревших функций $number = rand(0, getrandmax()); echo $number; // Использование динамических свойств (PHP 8.2) class Test { public $existingProperty; } $test = new Test(); $test->dynamicProperty = 'Dynamic'; // Параметры с значениями по умолчанию перед обязательными параметрами function example($a = 1, $b) { return $a + $b; } echo example(2);
-
Анализируйте код с помощью PHP_CodeSniffer:
vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion=8.0 src/test.php
-
Исправьте проблемы совместимости с помощью Rector:
vendor/bin/rector process src
-
Повторно запустите PHP_CodeSniffer, чтобы убедиться, что все проблемы исправлены:
vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion=8.0 src/test.php