Как обновить версию PHP для всего проекта

Думаю, вам когда-нибудь придется обновить версию php для всего проекта, будь он на старом не поддерживаемом фрейемворке или на популярном Laravel или Symfony. Вы, конечно же, можете вручную пройтись по всем файлам проекта и отсмотреть какие части кода требуется изменить или переписать. Но это будет довольно долго и не эффективно, ведь надо знать все deprecated функции, переменные и прочее.

Я советую вам воспользоваться уже готовыми методами: использовать этого специальный пакет PHP CodeSniffer и пройтись с ним по проекту или (вариант похуже) воспользоваться статическим анализатором (например, psalm) с параметрами проверки PHP версии.

Рассмотрим вариант установки и настройки специализированного для этого пакета PHP CodeSniffer.

# 1. Добавляем зависимости
composer require --dev squizlabs/php_codesniffer phpcompatibility/php-compatibility

# 2. (Рекомендуется) Устанавливаем плагин для авто-настройки
composer require --dev dealerdirect/phpcodesniffer-composer-installer

Плагин dealerdirect/phpcodesniffer-composer-installer автоматически регистрирует PHPCompatibility в PHP_CodeSniffer, избавляя вас от ручной настройки путей

После установки проверка выполняется командой phpcs. Ниже пример для проверки совместимости с PHP 8.1 и выше

# Запуск проверки (например, в папке src/)
./vendor/bin/phpcs src/ --standard=PHPCompatibility --runtime-set testVersion 8.1-

Разбор параметров:

  • --standard=PHPCompatibility — используем стандарт проверки совместимости.
  • --runtime-set testVersion 8.1- — проверяем код на совместимость с PHP 8.1 и выше (дефис означает «и выше»). Можно указывать диапазоны, например 7.4-8.2.
  • -p — показывает прогресс выполнения.
  • --extensions=php — ограничивает проверку только PHP-файлами (по умолчанию проверяются ещё JS и CSS)

Пример результата

Если в коде используется устаревшая функция (например, mysql_connect), вы увидите примерно следующее:

FILE: /path/to/your/file.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
 10 | ERROR | Extension 'mysql_' is deprecated since PHP 5.5 and
    |       | removed since PHP 7.0; use mysqli instead
----------------------------------------------------------------------

4. Продвинутая настройка (файл конфигурации)

Чтобы не вводить параметры каждый раз, создайте в корне проекта файл phpcs.xml:

<?xml version="1.0"?>
<ruleset name="MyProject">
    <!-- Какую папку проверяем -->
    <file>src/</file>
    
    <!-- Какую версию PHP проверяем -->
    <config name="testVersion" value="8.1-"/>
    
    <!-- Используем стандарт PHPCompatibility -->
    <rule ref="PHPCompatibility"/>
    
    <!-- Игнорируем папку вендора (чужие библиотеки) -->
    <exclude-pattern>vendor/</exclude-pattern>
</ruleset>

Теперь проверка запускается просто командой:

./vendor/bin/phpcs

Дополнительные стандарты (WordPress, Symfony и др.)

Если вы используете популярные CMS или фреймворки, они часто предоставляют свои прослойки (polyfills), которые могут вызывать ложные срабатывания. Для этого существуют специальные правила:

  • WordPressphpcompatibility/phpcompatibility-wp
  • Symfonyphpcompatibility/phpcompatibility-symfony
  • Joomlaphpcompatibility/phpcompatibility-joomla

Установка аналогична:

composer require --dev phpcompatibility/phpcompatibility-wp

Запуск:

./vendor/bin/phpcs --standard=PHPCompatibilityWP
Запись опубликована в рубрике Web. Добавьте в закладки постоянную ссылку.

Добавить комментарий