Рано или поздно наступит момент, когда вам нужно будет перенести свои проекты на разные версии 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>
HTML
Markdown
Text
Это вызывает генерацию документации, а не просто проверку. -
<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>
Инструмент выведет что-то похожее на это:
Обратите внимание: если вы тестируете обратную совместимость, рекомендуется запускать 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, у нас есть вся информация, необходимая для обновления кода.
Надеюсь, что это быстрое введение подсказки помогло! Как вы тестируете на совместимость?