这是 PHP CodeSniffer 的一组嗅探器,用于检查 PHP 跨版本兼容性。它将允许您分析代码与更高版本和更低版本 PHP 的兼容性。
testVersion
与命令行该项目旨在涵盖自 PHP 5.0 到最新 PHP 版本以来引入的所有 PHP 兼容性更改。这是一个持续的过程,覆盖率尚未达到 100%(如果确实可以的话)。我们的 GitHub 问题跟踪器可以跟踪进度。
检查 PHP 4 代码中的兼容性问题(特别是 PHP 4 和 PHP 5.0 之间)的 Pull 请求非常受欢迎,因为在某些情况下人们仍然需要帮助升级遗留系统。然而,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.3.0 的低 2.x 版本的支持。从版本 10.0.0 开始,已删除对 PHP < 5.4 和 PHP CodeSniffer < 3.10.0 的支持。
感谢所有贡献者的宝贵贡献。
感谢 WP Engine 对 PHP 7.0 嗅探的支持。
该图书馆已被重组。所有嗅探都已分类,并且大量嗅探已被重命名。
如果您在自定义规则集中使用完整的PHPCompatibility
标准,而没有exclude
指令,并且(尚未)使用 PHP_CodeSniffer 3.2.0 中引入的新型 PHP_CodeSniffer 注释,则这不会产生明显的效果,并且一切都应该像以前一样工作。
但是,如果您确实在自定义规则集中使用 PHPCompatibility 嗅探的exclude
指令,或者使用新型 PHP_CodeSniffer 内联注释,则在升级时需要更新这些注释。这应该是一次性的改变。更改日志包含有关所有嗅探重命名的详细信息。
升级前请仔细阅读 9.0.0 版本的变更日志。
composer.json
文件的require-dev
部分。 "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 插件添加到composer.json
文件的require-dev
部分即可。
作为使用自定义规则集的最后一种选择,您可以通过将以下代码片段添加到自定义规则集来告诉 PHP CodeSniffer PHPCompatibility 标准的路径:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
以安装 PHP CodeSniffer、PHPCompatibility 编码标准和(可选)Composer 插件。./vendor/bin/phpcs -i
来验证 PHPCompatibility 标准是否已正确注册。 PHPCompatibility 应列为可用标准之一。./vendor/bin/phpcs -p . --standard=PHPCompatibility
通过您喜欢的方法安装 PHP CodeSniffer。
PHP CodeSniffer 提供了多种安装方法来适应您的工作流程:Composer、PEAR、Phar 文件、压缩/焦油发布档案或使用 Git 检查存储库。
专业提示:在系统$PATH
环境变量中注册 PHPCS 的路径,以使phpcs
命令可以从文件系统中的任何位置使用。
下载最新的 PHPCompatibility 版本并将其解压缩到任意目录中。
您还可以选择使用 git 克隆存储库,以便定期轻松更新您的安装。
使用命令行中的以下命令,将放置 PHPCompatibility 存储库副本的目录路径添加到 PHP CodeSniffer 配置中:
phpcs --config-set installed_paths /path/to/PHPCompatibility
即,如果您将PHPCompatibility
存储库放置在/my/custom/standards/PHPCompatibility
目录中,则需要将该目录添加到 PHP installed_paths
ths 配置变量中。
警告:installed_paths
命令会覆盖之前设置的installed_paths
。如果您之前为其他外部标准设置了installed_paths
,请先运行phpcs --config-show
,然后运行installed_paths
命令,其中所有需要的路径均以逗号分隔,即:
phpcs --config-set installed_paths /path/1,/path/2,/path/3
专业提示:或者,如果您使用自定义规则集,您可以通过将以下代码片段添加到自定义规则集来告诉 PHP CodeSniffer PHPCompatibility 标准的路径:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
通过在命令行上运行phpcs -i
验证 PHPCompatibility 标准是否已正确注册。 PHPCompatibility 应列为可用标准之一。
现在您可以使用以下命令来检查您的代码:
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
。testVersion
来检查。这将启用对已弃用/删除的 PHP 功能的检查以及使用新 PHP 功能的代码检测。--runtime-set testVersion 5.5
添加到命令行命令来仅运行针对一个特定 PHP 版本的检查。--runtime-set testVersion 5.3-5.5
。--runtime-set testVersion 7.0-
运行 PHP 7.0 及更高版本的所有检查。--report-full=path/to/report-file
。有关更多信息和其他报告选项,请查看 PHP CodeSniffer wiki。截至 2018 年中期,提供了一组有限的框架/CMS 特定规则集。这些规则集托管在它们自己的存储库中。
PHPCompatibilityJoomla
GitHub | PHPCompatibilityJoomla包装学家PHPCompatibilityWP
GitHub | PHP兼容性WP包装学家自 2018 年秋季以来,还有许多 PHP polyfill 特定规则集可用:
PHPCompatibilityPasswordCompat
GitHub | PHPCompatibilityPasswordCompat Packagist:负责@ircmaxell 的password_compat
polyfill 库。PHPCompatibilityParagonie
GitHub | Packagist:包含两个规则集,分别考虑 Paragonie random_compat
和sodium_compat
polyfill 库。PHPCompatibilitySymfony
GitHub | PHPCompatibilitySymfony Packagist:包含许多规则集,这些规则集解释了 Symfony 项目提供的各种 PHP polyfill 库。有关可用规则集的更多详细信息,请查看 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 带注释的规则集 wiki 页面中所述。
testVersion
与命令行在 PHPCS 3.2.0 及更低版本中,一旦您在规则集中设置了testVersion
,您就无法再从命令行否决它。从 PHPCS 3.3.0 开始,通过命令行设置的testVersion
将否决规则集中的testVersion
。
例如,当您的项目需要遵守 PHP 5.5-
,但您有一个需要与 PHP 5.2-
兼容的引导文件时,这可以提供更大的灵活性。
目前,有两个嗅探器具有可以通过规则集设置的属性。将来可能会提供更多自定义属性。
PHPCompatibility.Extensions.RemovedExtensions
嗅探器根据用于这些扩展的函数前缀检查已删除的扩展。这可能会与使用相同函数前缀的用户态函数发生冲突。
要将用户态函数列入白名单,您可以将逗号分隔的函数名称列表传递给嗅探器。
<!-- 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
接口的接口(嗅探器未知的接口)时,它会发出警告,并建议将接口名称添加到属性中。
要通知嗅探有关提供可序列化接口的其他接口的信息,请将如下代码片段添加到您的自定义规则集中:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
有数百个公共项目使用 PHPCompatibility 或在其之上进行扩展。您可能知道或看过的一些内容的简短列表:
非常欢迎您的贡献。请阅读贡献文档以开始使用。
此代码根据 GNU 宽通用公共许可证 (LGPL) 发布。欲了解更多信息,请访问 http://www.gnu.org/copyleft/lesser.html