magento / php-compatibility-fork
PHP_CodeSniffer 的一个 sniff 集合,用于检查 PHP 的跨版本兼容性。这是 phpcompatibility/php-compatibility 的分支。
Requires
- php: >=5.4
- phpcsstandards/phpcsutils: ^1.0.5
- squizlabs/php_codesniffer: ^3.7.1
Requires (Dev)
- php-parallel-lint/php-console-highlighter: ^1.0.0
- php-parallel-lint/php-parallel-lint: ^1.3.2
- phpcsstandards/phpcsdevcs: ^1.1.3
- phpcsstandards/phpcsdevtools: ^1.2.0
- phpunit/phpunit: ^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4 || ^10.1.0
- yoast/phpunit-polyfills: ^1.0.5 || ^2.0.0
Suggests
- roave/security-advisories: dev-master || Helps prevent installing dependencies with known security issues.
Replaces
This package is auto-updated.
Last update: 2024-08-30 00:37:12 UTC
README
注意
这是 PHPCompatibility 的分支。它在此基础上添加了以下功能
- 添加了 sniff
PHPCompatibility.ParameterValues.RemovedMbStringEncodings
,报告使用 QPrint、Base64、Uuencode 和 HTML-ENTITIES 'text encodings' 与 MBString 函数作为已弃用的用法。请参阅 PHP 8.2 已弃用功能。 - 添加了 sniff
PHPCompatibility.Classes.RemovedDynamicProperties
,报告在类中使用动态属性作为已弃用的用法。请参阅 PHP 8.2 已弃用功能。 - 增强 sniff
PHPCompatibility.FunctionDeclarations.ForbiddenFinalPrivateMethods
以可修复。 - 用更包容的术语替换了令人反感的术语。
PHP 代码规范兼容性标准
这是一个用于 PHP CodeSniffer 的 sniff 集合,用于检查 PHP 的跨版本兼容性。它将允许您分析您的代码与更高或更低版本的 PHP 兼容性。
- PHP 版本支持
- 要求
- 谢谢
- 升级到 PHPCompatibility 9.0.0
- 在 Composer 项目中安装(方法 1)
- 通过 git check-out 到任意目录进行安装(方法 2)
- 检查您的代码与特定 PHP 版本的兼容性
- 使用自定义规则集
- 扩展 PHPCompatibility 的项目
- 贡献
- 许可
PHP 版本支持
项目旨在覆盖自 PHP 5.0 以来引入的所有 PHP 兼容性更改,直至最新的 PHP 版本。这是一个持续的过程,覆盖范围尚未达到 100%(如果确实可能达到的话)。进度可在 我们的 GitHub 问题跟踪器 上追踪。
欢迎检查 PHP 4 代码中兼容性问题的拉取请求 - 特别是 PHP 4 和 PHP 5.0 之间的兼容性问题 - 因为仍然存在需要帮助升级旧系统的场合。然而,由于 sniffs 目前并未积极开发,因此引入 PHP 5.1 之前的变化的覆盖范围将保持零散。
要求
- PHP 5.4+
- PHP CodeSniffer: 3.7.1+
sniffs 设计为无论您使用哪个 PHP 版本运行 PHP CodeSniffer,都能给出相同的结果。您应该在不考虑您的测试环境中使用的 PHP 版本的情况下获得一致的结果,尽管为了获得最佳结果,建议在最近的 PHP 版本上结合最近的 PHP_CodeSniffer 版本运行 sniffs。
自 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.7.1 的支持。
谢谢
感谢所有贡献者做出的宝贵贡献。
感谢WP Engine对PHP 7.0嗅探器的支持。
⚠️ 升级到PHPCompatibility 9.0.0 ⚠️
该库已重新组织。所有嗅探器已分类,并且许多嗅探器已被重命名。
如果您在自定义规则集中使用完整的PHPCompatibility
标准而无需exclude
指令,并且尚未使用在PHP_CodeSniffer 3.2.0中引入的新样式PHP_CodeSniffer注释,则不会有明显的影响,一切应如以前一样工作。
但是,如果您在自定义规则集中为PHPCompatibility嗅探器使用exclude
指令,或者使用新样式PHP_CodeSniffer内联注释,则需要升级时更新这些指令。这应该是一次性的更改。变更日志包含所有嗅探器重命名的详细信息。
在升级之前,请仔细阅读版本9.0.0的变更日志。
在 Composer 项目中安装(方法 1)
- 将以下行添加到您的
composer.json
文件的require-dev
部分。"require-dev": { "magento/php-compatibility-fork": "*" }, "prefer-stable" : true
- 接下来,PHP CodeSniffer需要知道标准的位置。
-
如果PHPCompatibility是您使用的唯一外部PHP CodeSniffer标准,您可以将以下内容添加到
composer.json
文件中,以自动运行必要的命令"scripts": { "post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/magento/php-compatibility-fork", "post-update-cmd" : "\"vendor/bin/phpcs\" --config-set installed_paths vendor/magento/php-compatibility-fork" }
-
或者——如果您使用多个外部PHP CodeSniffer标准,则强烈推荐这样做——您可以使用以下任一Composer插件来为您处理。
只需将您偏好的Composer插件添加到您的
composer.json
文件的require-dev
部分。- DealerDirect/phpcodesniffer-composer-installer:"^0.6.0"
- higidi/composer-phpcodesniffer-standards-plugin
- SimplyAdmire/ComposerPlugins。此插件可能仍然可以使用,但似乎已被废弃。
-
如果使用自定义规则集,作为最后的替代方案,您可以通过向自定义规则集中添加以下代码片段来告诉PHP CodeSniffer PHPCompatibility标准的位置
<config name="installed_paths" value="vendor/magento/php-compatibility-fork" />
-
- 运行
composer update --lock
以安装PHP CodeSniffer、PHPCompatibility编码标准和可选的Composer插件。 - 通过在命令行中运行
./vendor/bin/phpcs -i
来验证PHPCompatibility标准是否正确注册。PHPCompatibility应列在可用标准之一中。 - 现在,您可以使用以下命令检查您的代码
./vendor/bin/phpcs -p . --standard=PHPCompatibility
通过 git check-out 到任意目录进行安装(方法 2)
-
PHP CodeSniffer提供多种安装方法,以满足您的工作流程:Composer、PEAR、Phar文件、zip/tar存档或使用Git检出存储库。
技巧:将PHPCS的路径注册到系统
$PATH
环境变量中,以便在文件系统的任何位置使用phpcs
命令。 -
下载最新的PHPCompatibility版本并将其解压缩/解tar到一个任意目录中。
您还可以选择使用git克隆存储库以轻松定期更新您的安装。
-
使用以下命令从命令行使用您放置PHPCompatibility存储库副本的目录路径配置PHP CodeSniffer
phpcs --config-set installed_paths /path/to/PHPCompatibility
例如,如果您将
PHPCompatibility
存储库放置在/my/custom/standards/PHPCompatibility
目录中,则需要将该目录添加到 PHP CodeSniffer 的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 PHPCompatibility 标准的路径
<config name="installed_paths" value="/path/to/PHPCompatibility" />
-
通过在命令行中运行
phpcs -i
来验证 PHPCompatibility 标准是否正确注册。PHPCompatibility 应列在可用标准之一。 -
现在,您可以使用以下命令检查您的代码
phpcs -p . --standard=PHPCompatibility
检查您的代码与特定 PHP 版本的兼容性
- 使用命令行运行编码标准:
phpcs -p . --standard=PHPCompatibility
。 - 默认情况下,您将仅收到有关已弃用和/或已删除的 PHP 功能的通知。
- 要充分利用 PHPCompatibility 标准,您应指定一个
testVersion
以进行检查。这将启用对已弃用/删除的 PHP 功能以及使用新 PHP 功能的代码的检测。- 您可以通过将
--runtime-set testVersion 5.5
添加到您的命令行命令中来仅对特定 PHP 版本运行检查。 - 您还可以指定代码需要支持的 PHP 版本范围。在这种情况下,将报告影响该范围内任何 PHP 版本的兼容性问题:
--runtime-set testVersion 5.3-5.5
。 - 从 PHPCompatibility 7.1.3 版本开始,如果您想支持特定版本以上或以下的所有内容,可以省略范围的一部分,例如,使用
--runtime-set testVersion 7.0-
来运行所有针对 PHP 7.0 及以上版本的检查。
- 您可以通过将
- 默认情况下,报告将发送到控制台。如果您想将报告保存到文件,请将以下内容添加到命令行命令中:
--report-full=path/to/report-file
。有关更多信息和其他报告选项,请参阅 PHP CodeSniffer wiki。
使用自定义规则集
与任何 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-"/>
其他高级选项,例如更改特定 sniffs 的消息类型或严重性,如 PHPCS Annotated ruleset wiki 页面所述,当然也受支持。
规则集中的 testVersion
与命令行
在 PHPCS 3.2.0 和更低版本中,一旦在规则集中设置了 testVersion
,就无法再从命令行中覆盖它。从 PHPCS 3.3.0 版本开始,通过命令行设置的 testVersion
将覆盖规则集中的 testVersion
。
这允许在项目需要符合 PHP 5.5-
,但引导文件需要与 PHP 5.2-
兼容的情况下,提供更多灵活性。
PHPCompatibility 特定选项
目前,有两个 sniffs 具有可以通过规则集设置的属性。未来可能还会提供更多自定义属性。
PHPCompatibility.Extensions.RemovedExtensions
sniff 检查基于这些扩展使用的函数前缀删除的扩展。这可能会与使用相同函数前缀的用户空间函数冲突。
要允许用户空间函数,您可以将函数名以逗号分隔的列表传递给 sniffs。
<!-- Allow the mysql_to_rfc3339() and mysql_another_function() functions. --> <rule ref="PHPCompatibility.Extensions.RemovedExtensions"> <properties> <property name="functionAllowlist" 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 的项目
有成百上千的公共项目使用 PHPCompatibility 或在其基础上扩展。以下是一些您可能知道或可以查看的项目列表
- adamculp/php-code-quality - 一个执行大量代码质量检查的 Docker 镜像
- VFAC/PHP7Compatibility - 一个用于检查 PHP7 兼容性的 Docker 容器
- grumphp-php-compatibility - GrumPHP 的一个插件
- PHPCompatibility Checker WordPress 插件: Wordpress 网站 和 Github
- WordPress Tide 项目
- PHPStorm 内置了对 PHPCompatibility 的支持
- Moodle codechecker - 一个用于 Moodle 编码风格(包括 PHPCompatibility)的插件 插件
- Github Action - 一个在您的源代码上运行此 PHPCS 标准的 Github Action
贡献
非常欢迎贡献。请阅读 CONTRIBUTING 文档以开始。
许可
此代码在 GNU Lesser General Public License (LGPL) 下发布。更多信息请访问 http://www.gnu.org/copyleft/lesser.html