phpcompatibility/php-compatibility 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

phpcompatibility/php-compatibility

Composer 安装命令:

composer require --dev phpcompatibility/php-compatibility

包简介

A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.

README 文档

README

Latest Stable Version Latest Unstable Version Awesome License

CS Build Status Test Build Status Coverage Status

Minimum PHP Version Tested on PHP 7.2 to nightly

This is a set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility. It will allow you to analyse your code for compatibility with higher and lower versions of PHP.

PHP Version Support

The project aims to cover all PHP compatibility changes introduced since PHP 5.0 up to the latest PHP release. This is an ongoing process and coverage is not yet 100% (if, indeed, it ever could be). Progress is tracked on our GitHub issue tracker.

Pull requests that check for compatibility issues in PHP 4 code - in particular between PHP 4 and PHP 5.0 - are welcome as there are still situations where people need help upgrading legacy systems. However, coverage for changes introduced before PHP 5.1 will remain patchy as sniffs for this are not actively being developed at this time.

Funding

This project needs funding.

The project team has spend thousands of hours creating and maintaining this package. This is unsustainable without funding.

If you use PHPCompatibility, please fund this work by donating to the PHP_CodeSniffer Open Collective.

Requirements

  • PHP 7.2+
  • PHP_CodeSniffer: 4.0.1+.
  • PHPCSUtils: 1.1.2+

The sniffs are designed to give the same results regardless of which PHP version you are using to run PHP_CodeSniffer. You should get consistent results independently of the PHP version used in your test environment, though for the best results it is recommended to run the sniffs on a recent PHP version in combination with a recent PHP_CodeSniffer version.

As of version 8.0.0, the PHPCompatibility standard can also be used with PHP_CodeSniffer 3.x.
As of version 9.0.0, support for PHP_CodeSniffer 1.5.x and low 2.x versions < 2.3.0 has been dropped.
As of version 10.0.0, support for PHP < 7.2 and PHP_CodeSniffer < 4.0.1 has been dropped (and support for PHP_CodeSniffer 4.x was added).

Installation

As of PHPCompatibility 10.0.0, installation via Composer using the below instructions is the only supported type of installation.

Composer will automatically install the project dependencies and register the PHPCompatibility ruleset with PHP_CodeSniffer using the Composer PHPCS plugin.

If you are upgrading from an older PHPCompatibility version to version 10.0.0, please read the Upgrade guide first!

Composer Project-based Installation

Run the following from the root of your project:

composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev phpcompatibility/php-compatibility:"^10.0.0@dev"

Composer Global Installation

Alternatively, you may want to install this standard globally:

composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer global require --dev phpcompatibility/php-compatibility:"^10.0.0@dev"

Updating your PHPCompatibility install to a newer version

If you installed PHPCompatibility using either of the above commands, you can upgrade to a newer version as follows:

# Project local install
composer update phpcompatibility/php-compatibility --with-dependencies

# Global install
composer global update phpcompatibility/php-compatibility --with-dependencies

Using your PHPCompatibility install

You can verify that the PHPCompatibility standard is registered correctly by running vendor/bin/phpcs -i on the command line. PHPCompatibility and PHPCSUtils should both be listed as available standards.

Once you have installed PHPCompatibility using either of the above commands, use it as follows:

# Project local install
vendor/bin/phpcs -ps . --standard=PHPCompatibility

# Global install
%USER_DIRECTORY%/Composer/vendor/bin/phpcs -ps . --standard=PHPCompatibility

Pro-tip: For the convenience of using phpcs as a global command, use the Global install method and add the path to the %USER_DIRECTORY%/Composer/vendor/bin directory to the PATH environment variable for your operating system.

Sniffing your code for compatibility with specific PHP version(s)

  • Run the coding standard from the command-line with phpcs -p . --standard=PHPCompatibility.
  • By default, you will only receive notifications about deprecated and/or removed PHP features.
  • To get the most out of the PHPCompatibility standard, you should specify a testVersion to check against. That will enable the checks for both deprecated/removed PHP features as well as the detection of code using new PHP features.
    • You can run the checks for just one specific PHP version by adding --runtime-set testVersion 5.5 to your command line command.
    • You can also specify a range of PHP versions that your code needs to support. In this situation, compatibility issues that affect any of the PHP versions in that range will be reported: --runtime-set testVersion 5.3-5.5.
    • As of PHPCompatibility 7.1.3, you can omit one part of the range if you want to support everything above or below a particular version, i.e. use --runtime-set testVersion 7.0- to run all the checks for PHP 7.0 and above.
  • By default the report will be sent to the console, if you want to save the report to a file, add the following to the command line command: --report-full=path/to/report-file. For more information and other reporting options, check the PHP_CodeSniffer wiki.

Using a framework/CMS/polyfill specific ruleset

As of mid 2018, a limited set of framework/CMS specific rulesets is available. These rulesets are hosted in their own repositories.

Since the autumn of 2018, there are also a number of PHP polyfill specific rulesets available:

If you want to make sure you have all PHPCompatibility rulesets available at any time, you can use the PHPCompatibilityAll package GitHub | Packagist.

IMPORTANT: Framework/CMS/Polyfill specific rulesets do not set the minimum PHP version for your project, so you will still need to pass a testVersion to get the most accurate results.

Using a custom ruleset

Like with any PHP_CodeSniffer standard, you can add PHPCompatibility to a custom PHP_CodeSniffer ruleset.

<?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>

You can also set the testVersion from within the ruleset:

    <!-- Check for cross-version support for PHP 7.2 and higher. -->
    <config name="testVersion" value="7.2-"/>

Other advanced options, such as changing the message type or severity of select sniffs, as described in the PHPCS Annotated ruleset wiki page are, of course, also supported.

testVersion in the ruleset versus command-line

Starting with PHP_CodeSniffer 3.3.0, a testVersion set via the command-line will overrule the testVersion in the ruleset.

This allows for more flexibility when, for instance, your project needs to comply with PHP 5.5-, but you have a bootstrap file which needs to be compatible with PHP 5.2-.

Additionally, as of PHP_CodeSniffer 4.0.0, a testVersion set in an included ruleset can now be overruled from your project (root) ruleset.

PHPCompatibility specific options

At this moment, there are two sniffs which have a property which can be set via the ruleset. More custom properties may become available in the future.

The PHPCompatibility.Extensions.RemovedExtensions sniff checks for removed extensions based on the function prefix used for these extensions. This might clash with userland functions using the same function prefix.

To whitelist userland functions, you can pass a comma-delimited list of function names to the sniff.

    <!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
    <rule ref="PHPCompatibility.Extensions.RemovedExtensions">
        <properties>
            <property name="functionWhitelist" type="array">
                <element value="mysql_to_rfc3339"/>
                <element value="mysql_another_function"/>
            </property>
        </properties>
    </rule>

The PHPCompatibility.Interfaces.RemovedSerializable sniff needs to know about all interfaces which extend the Serializable interface to provide the most reliable results. The sniff will warn when it encounters an interface extending the Serializable interface which is unknown to the sniff and recommend for the interface name to be added to the property.

To inform the sniff about additional interfaces providing the Serializable interface, add a snippet along the lines of the below to your custom ruleset:

    <rule ref="PHPCompatibility.Interfaces.RemovedSerializable">
        <properties>
            <property name="serializableInterfaces" type="array">
                <element value="MyCustomSerializableInterface"/>
                <element value="AnotherSerializableInterface"/>
            </property>
        </properties>
    </rule>

Projects extending PHPCompatibility

There are hundreds of public projects using PHPCompatibility or extending on top of it. A short list of some that you might know or have a look at :

Contributing

Contributions are very welcome. Please read the CONTRIBUTING documentation to get started.

License

This code is released under the GNU Lesser General Public License (LGPL). For more information, visit http://www.gnu.org/copyleft/lesser.html

phpcompatibility/php-compatibility 适用场景与选型建议

phpcompatibility/php-compatibility 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 80.33M 次下载、GitHub Stars 达 2.29k, 最近一次更新时间为 2018 年 07 月 16 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「static analysis」 「standards」 「compatibility」 「phpcs」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 phpcompatibility/php-compatibility 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 phpcompatibility/php-compatibility 我们能提供哪些服务?
定制开发 / 二次开发

基于 phpcompatibility/php-compatibility 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 80.33M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2305
  • 点击次数: 26
  • 依赖项目数: 1346
  • 推荐数: 5

GitHub 信息

  • Stars: 2290
  • Watchers: 50
  • Forks: 204
  • 开发语言: PHP

其他信息

  • 授权协议: LGPL-3.0-or-later
  • 更新时间: 2018-07-16