Статьи

Краткое введение: PhpСовместимость для PHPCS — Готовы ли вы к PHP7?

Рано или поздно наступит момент, когда вам нужно будет перенести свои проекты на разные версии PHP. Как вы проверите, совместима ли вы с версией PHP, отличной от той, на которой вы разрабатывали?

Всегда есть возможность установить версию PHP, на которую мы хотим перейти, запустить php -lчто-то вроде PHPSA, чтобы проверить наличие синтаксических ошибок, проверить документацию PHP на наличие известных проблем с миграцией и надеяться на лучшее. Или мы можем использовать некоторые доступные сторонние инструменты для проверки совместимости версий PHP в наших проектах.

анализировать векторное изображение

Проверьте совместимость с PHPCompatibility

PHPCompatibility — это набор сниффов, которые мы можем установить поверх PHPCS . Этот инструмент позволяет нам проверять совместимость нашего проекта как с новыми, так и с более старыми версиями PHP. Если вы не знакомы с инструментами PHP QA , PHPCS — это инструмент, который проверяет PHP, JavaScript и CSS на наличие различных нарушений кода на основе различных наборов стандартов кодирования.

Текущая итерация PHPCompatibility поддерживает версии PHP до PHP 7.

Установка PHPCompatibility

PHPCompatibility можно установить через Pear или Composer . Для этого конкретного случая мы установим PHPCS с помощью Composer, а затем развернем наши стандарты кодирования PHPCompatibility прямо поверх него.

Для локальной установки:

 composer require "squizlabs/php_codesniffer=2.*"

После установки PHPCS перейдем в папку PHPCS /Standards/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards

 git clone https://github.com/wimg/PHPCompatibility.git

Эта команда развернет стандарт кодирования PHPCompatibility прямо в нашу папку стандартов вместе со стандартами кодирования, уже включенными в PHPCS. Чтобы убедиться, что PHPCS и PHPCompatibility были успешно установлены, просто запустите команду:

 ./vendor/bin/phpcs -i

Это перечислит все установленные стандарты. Мы должны увидеть PHPCompatibility

Для глобальной установки тот же метод действителен, просто убедитесь, что вы используете глобальное требование Composer:

 composer global require "squizlabs/php_codesniffer=2.*" 

а затем клонировать PHPCompatibility в следующую папку:

 ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards

Использование PHPCS

Если вы никогда раньше не использовали PHPCS, всегда хорошо начать с ./vendor/bin/phpcs -h Это покажет нам раздел справки PHPCS.

Прежде чем мы углубимся в использование стандарта PHPCompatibility, есть несколько команд PHPCS, которые помогут нам сделать наши тесты совместимости более быстрыми, эффективными и соответствующими требуемым результатам:

  • -i Эта опция будет полезна, если у нас длинный список сообщений и мы хотим отфильтровать предупреждения, чтобы сосредоточиться на ошибках.

  • -l

  • -p Особенно полезно для больших проектов, для поддержания статуса.

  • -i

  • <file>

  • <extensions>

  • <generator>HTMLMarkdownText Это вызывает генерацию документации, а не просто проверку.

  • <patterns>vendor

  • <severity>

  • <standard>

  • <runtime-set> Синтаксис этой команды следующий:

     phpcs --runtime-set <option> <value>`
    

Этот список далеко не исчерпывающий, но должен быть очень полезен при тонкой настройке наших проверок.

Проверка совместимости

Для проверки совместимости мы можем запустить следующую команду:

 ./vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion 7 <path>

С помощью этой команды мы используем стандарт PHPCompatibility с опцией runtime-set, которую мы видели ранее. Мы проверяем совместимость с PHP 7 для файла или папки, определенной <path>

Инструмент выведет что-то похожее на это:

PHPCompat Тестовый запуск

Обратите внимание: если вы тестируете обратную совместимость, рекомендуется запускать PHPCS в последней доступной версии PHP. Например, если в вашем коде есть ключевое слово yield Он только скажет вам, что он недоступен в предыдущих версиях PHP, если он действительно знает, что это такое.

Если мы хотим проверять только файлы .php<extensions> Добавляя его к команде, которую мы использовали ранее:

 ./vendor/bin/phpcs --standard=PHPCompatibility --extensions=php --runtime-set testVersion 7 <path>

Для подробного отчета мы можем использовать параметр --report-full=<path>.txt

Чтобы игнорировать файлы или папки в тесте на совместимость (например, вышеупомянутая папка vendor--ignore=*/tests/*,*/vendor/* <path> Таким образом, указанные файлы и папки не будут проверяться на совместимость.

Все опции PHPCS, которые мы видели ранее, могут быть использованы для более эффективного использования инструмента.

Пример из реальной жизни

Конечно, мы также хотим знать, может ли этот инструмент помочь нам в реальных приложениях производственного типа. Давайте использовать его в сложном приложении, чтобы увидеть результаты. Я выбрал PHPMailer для этого.

 git clone https://github.com/PHPMailer/PHPMailer.git mailer
cd mailer
composer install

Это клонирует PHPMailer в папку /mailer После этого нам нужно установить как PHPCS, так и стандарт PHPCompatibility:

 composer require "squizlabs/php_codesniffer"
cd vendor/squizlabs/php_codesniffer/CodeSniffer/Standards
git clone https://github.com/wimg/PHPCompatibility.git

Наконец, давайте запустим стандарт PHPCompatibility для одного файла (теперь мы можем запустить его и для всего проекта, но давайте используем один файл для этой демонстрации).

 ./vendor/bin/phpcs --standard=PHPCompatibility --extensions=php --runtime-set testVersion 5.6 class.phpmailer.php

Как мы видим, хотя PHPMailer не совсем готов к PHP 5.6, у нас есть вся информация, необходимая для обновления кода.

Надеюсь, что это быстрое введение подсказки помогло! Как вы тестируете на совместимость?