magento/php-compatibility-fork

PHP_CodeSniffer 的一个 sniff 集合,用于检查 PHP 的跨版本兼容性。这是 phpcompatibility/php-compatibility 的分支。

安装数: 579,099

依赖项: 3

建议者: 0

安全性: 0

星标: 3

关注者: 4

分支: 193

类型:phpcodesniffer-standard

v0.1.0 2023-11-29 22:34 UTC

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 代码规范兼容性标准

Latest Stable Version Latest Unstable Version Awesome License

CS Build Status Test Build Status Coverage Status

Minimum PHP Version Tested on PHP 5.4 to nightly

这是一个用于 PHP CodeSniffer 的 sniff 集合,用于检查 PHP 的跨版本兼容性。它将允许您分析您的代码与更高或更低版本的 PHP 兼容性。

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部分。

    • 如果使用自定义规则集,作为最后的替代方案,您可以通过向自定义规则集中添加以下代码片段来告诉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

    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 或在其基础上扩展。以下是一些您可能知道或可以查看的项目列表

贡献

非常欢迎贡献。请阅读 CONTRIBUTING 文档以开始。

许可

此代码在 GNU Lesser General Public License (LGPL) 下发布。更多信息请访问 http://www.gnu.org/copyleft/lesser.html