Это набор сниффов для PHP CodeSniffer, который проверяет совместимость между версиями PHP. Это позволит вам проанализировать ваш код на совместимость с более высокими и более низкими версиями PHP.
testVersion
в наборе правил или в командной строкеЦель проекта — охватить все изменения совместимости PHP, внесенные с версии PHP 5.0 до последней версии PHP. Это непрерывный процесс, и охват еще не достиг 100% (если вообще может быть). Прогресс отслеживается в нашем трекере проблем GitHub.
Запросы на включение, которые проверяют проблемы совместимости в коде PHP 4, особенно между PHP 4 и PHP 5.0, очень приветствуются, поскольку все еще существуют ситуации, когда людям требуется помощь в обновлении устаревших систем. Однако описание изменений, внесенных до PHP 5.1, останется неоднородным, поскольку в настоящее время его варианты активно не разрабатываются.
Сниффы предназначены для получения одинаковых результатов независимо от того, какую версию PHP вы используете для запуска PHP CodeSniffer. Вы должны получить стабильные результаты независимо от версии PHP, используемой в вашей тестовой среде, хотя для достижения наилучших результатов рекомендуется запускать анализы на последней версии PHP в сочетании с последней версией PHP_CodeSniffer.
Начиная с версии 8.0.0 стандарт PHPCompatibility также можно использовать с PHP CodeSniffer 3.x. Начиная с версии 9.0.0, поддержка PHP CodeSniffer 1.5.x и младших версий 2.x < 2.3.0 прекращена. Начиная с версии 10.0.0 поддержка PHP < 5.4 и PHP CodeSniffer < 3.10.0 прекращена.
Спасибо всем участникам за их ценный вклад.
Спасибо WP Engine за поддержку сниффов PHP 7.0.
Эта библиотека была реорганизована. Все сниффы были распределены по категориям, и значительное количество сниффов было переименовано.
Если вы используете полный стандарт PHPCompatibility
без директив exclude
в пользовательском наборе правил и (пока) не используете аннотацию PHP_CodeSniffer нового стиля, представленную в PHP_CodeSniffer 3.2.0, это не будет иметь заметного эффекта, и все должно работать как прежде.
Однако если вы используете директивы exclude
для проверки совместимости PHP в пользовательском наборе правил или используете встроенные аннотации PHP_CodeSniffer нового стиля, вам потребуется обновить их при обновлении. Это должно быть единоразовое изменение. Журнал изменений содержит подробную информацию обо всех переименованиях сниффов.
Пожалуйста, внимательно прочитайте журнал изменений версии 9.0.0 перед обновлением.
require-dev
вашего файла composer.json
. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
Если PHPCompatibility — единственный внешний стандарт PHP CodeSniffer, который вы используете, вы можете добавить следующее в файл composer.json
для автоматического запуска необходимой команды:
"scripts" : {
"post-install-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility " ,
"post-update-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility "
}
В качестве альтернативы (и это настоятельно рекомендуется, если вы используете более одного внешнего стандарта PHP CodeSniffer) вы можете использовать любой из следующих плагинов Composer, чтобы справиться с этим за вас.
Просто добавьте плагин Composer, который вы предпочитаете, в раздел require-dev
вашего файла composer.json
.
В качестве последней альтернативы, если вы используете собственный набор правил, вы можете указать PHP CodeSniffer путь к стандарту PHPCompatibility, добавив следующий фрагмент в свой собственный набор правил:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
, чтобы установить PHP CodeSniffer, стандарт кодирования PHPCompatibility и (необязательно) плагин Composer../vendor/bin/phpcs -i
в командной строке. PHPCompatibility должен быть указан как один из доступных стандартов../vendor/bin/phpcs -p . --standard=PHPCompatibility
Установите PHP CodeSniffer любым удобным для вас способом.
PHP CodeSniffer предлагает различные методы установки в соответствии с вашим рабочим процессом: Composer, PEAR, файл Phar, сжатые/заархивированные архивы релизов или проверка репозитория с помощью Git.
Совет: зарегистрируйте путь к PHPCS в системной переменной среды $PATH
, чтобы сделать команду phpcs
доступной из любой точки вашей файловой системы.
Загрузите последнюю версию PHPCompatibility и разархивируйте ее в произвольный каталог.
Вы также можете клонировать репозиторий с помощью git, чтобы регулярно обновлять вашу установку.
Добавьте путь к каталогу, в котором вы поместили копию репозитория PHPCompatibility, в конфигурацию PHP CodeSniffer, используя следующую команду из командной строки:
phpcs --config-set installed_paths /path/to/PHPCompatibility
Т.е. если вы поместили репозиторий PHPCompatibility
в каталог /my/custom/standards/PHPCompatibility
, вам нужно будет добавить этот каталог в переменную конфигурации PHP installed_paths
.
Предупреждение :installed_paths
перезаписывает все ранее установленные installed_paths
. Если вы ранее установили installed_paths
для других внешних стандартов, сначала запустите phpcs --config-show
, а затем запустите installed_paths
указав все необходимые пути, разделенные запятыми, то есть:
phpcs --config-set installed_paths /path/1,/path/2,/path/3
Совет: в качестве альтернативы, если вы используете собственный набор правил, вы можете указать PHP CodeSniffer путь к стандарту(ам) совместимости PHP, добавив следующий фрагмент в свой собственный набор правил:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
Убедитесь, что стандарт PHPCompatibility зарегистрирован правильно, запустив phpcs -i
в командной строке. PHPCompatibility должен быть указан как один из доступных стандартов.
Теперь вы можете использовать следующую команду для проверки вашего кода:
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
.testVersion
для проверки. Это позволит проверять как устаревшие/удаленные функции PHP, так и обнаруживать код, использующий новые функции PHP.--runtime-set testVersion 5.5
в команду командной строки.--runtime-set testVersion 5.3-5.5
.--runtime-set testVersion 7.0-
для запуска всех проверок для PHP 7.0 и выше.--report-full=path/to/report-file
. Для получения дополнительной информации и других вариантов отчетности посетите вики PHP CodeSniffer.По состоянию на середину 2018 года доступен ограниченный набор наборов правил, специфичных для платформы/CMS. Эти наборы правил размещаются в собственных репозиториях.
PHPCompatibilityJoomla
GitHub | УпаковщикPHPCompatibilityWP
GitHub | УпаковщикС осени 2018 года также доступен ряд наборов правил, специфичных для полифилов PHP:
PHPCompatibilityPasswordCompat
GitHub | Packagist: учитывает библиотеку password_compat
@ircmaxellpassword_compat.PHPCompatibilityParagonie
GitHub | Packagist: содержит два набора правил, которые учитывают библиотеки полифилов Paragonie random_compat
и sodium_compat
соответственно.PHPCompatibilitySymfony
GitHub | Packagist: содержит ряд наборов правил, которые учитывают различные библиотеки полифилов PHP, предлагаемые проектом Symfony. Более подробную информацию о доступных наборах правил можно найти в README репозитория PHPCompatibilitySymfony. Если вы хотите убедиться, что все наборы правил PHPCompatibility доступны в любое время, вы можете использовать пакет PHPCompatibilityAll
GitHub | Упаковщик.
ВАЖНО: Специальные наборы правил Framework/CMS/Polyfill не устанавливают минимальную версию PHP для вашего проекта, поэтому вам все равно придется передать testVersion
, чтобы получить наиболее точные результаты.
Как и в случае с любым стандартом PHP CodeSniffer, вы можете добавить PHPCompatibility в собственный набор правил PHP CodeSniffer.
<? xml version = " 1.0 " ?>
< ruleset name = " Custom ruleset " >
< description >My rules for PHP CodeSniffer</ description >
<!-- Run against the PHPCompatibility ruleset -->
< rule ref = " PHPCompatibility " />
<!-- Run against a second ruleset -->
< rule ref = " PSR2 " />
</ ruleset >
Вы также можете установить testVersion
из набора правил:
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />
Разумеется, также поддерживаются и другие расширенные параметры, такие как изменение типа сообщения или серьезности выбранных анализов, как описано на вики-странице набора правил с аннотациями PHPCS.
testVersion
в наборе правил или в командной строке В PHPCS 3.2.0 и ниже, как только вы установите testVersion
в наборе правил, вы больше не сможете отменить ее из командной строки. Начиная с PHPCS 3.3.0, testVersion
установленный через командную строку, будет иметь приоритет над testVersion
в наборе правил.
Это обеспечивает большую гибкость, когда, например, ваш проект должен соответствовать PHP 5.5-
, но у вас есть файл начальной загрузки, который должен быть совместим с PHP 5.2-
.
На данный момент есть два сниффа, у которых есть свойство, которое можно установить с помощью набора правил. В будущем могут стать доступны дополнительные пользовательские свойства.
PHPCompatibility.Extensions.RemovedExtensions
проверяет наличие удаленных расширений на основе префикса функции, используемого для этих расширений. Это может конфликтовать с функциями пользовательского пространства, использующими тот же префикс функции.
Чтобы внести в белый список функции пользовательского пространства, вы можете передать в sniff список имен функций, разделенных запятыми.
<!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
< rule ref = " PHPCompatibility.Extensions.RemovedExtensions " >
< properties >
< property name = " functionWhitelist " type = " array " value = " mysql_to_rfc3339,mysql_another_function " />
</ properties >
</ rule >
Обработчик PHPCompatibility.Interfaces.RemovedSerializable
должен знать обо всех интерфейсах, которые расширяют интерфейс Serializable
, чтобы обеспечить наиболее надежные результаты. Анализатор предупредит, когда встретит интерфейс, расширяющий интерфейс Serializable
, который неизвестен анализатору, и порекомендует добавить имя интерфейса в свойство.
Чтобы сообщить анализатору о дополнительных интерфейсах, предоставляющих интерфейс Serializable, добавьте фрагмент, подобный приведенному ниже, в свой собственный набор правил:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
Существуют сотни общедоступных проектов, использующих PHPCompatibility или расширяющих ее. Краткий список некоторых из них, которые вы, возможно, знаете или на которые можете обратить внимание:
Взносы очень приветствуются. Пожалуйста, прочитайте документацию CONTRIBUTING, чтобы начать.
Этот код выпущен под лицензией GNU Lesser General Public License (LGPL). Для получения дополнительной информации посетите http://www.gnu.org/copyleft/lesser.html.