Using PHPCompatibilitySymfony, you can analyse the codebase of a project using any of the Symfony polyfill libraries, for PHP cross-version compatibility.
A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Symfony polyfill libraries.
These rulesets prevent false positives from the PHPCompatibility standard by excluding back-fills and poly-fills which are provided by those libraries.
Symfony Polyfill Library | Corresponding PHPCompatibility Ruleset | Includes |
---|---|---|
polyfill-php54 |
PHPCompatibilitySymfonyPolyfillPHP54 |
|
polyfill-php55 |
PHPCompatibilitySymfonyPolyfillPHP55 |
PHPCompatibilityPasswordCompat |
polyfill-php56 |
PHPCompatibilitySymfonyPolyfillPHP56 |
|
polyfill-php70 |
PHPCompatibilitySymfonyPolyfillPHP70 |
PHPCompatibilityParagonieRandomCompat |
polyfill-php71 |
PHPCompatibilitySymfonyPolyfillPHP71 |
|
polyfill-php72 |
PHPCompatibilitySymfonyPolyfillPHP72 |
|
polyfill-php73 |
PHPCompatibilitySymfonyPolyfillPHP73 |
|
polyfill-php74 |
PHPCompatibilitySymfonyPolyfillPHP74 |
|
polyfill-php80 |
PHPCompatibilitySymfonyPolyfillPHP80 |
About "Includes": Some polyfills have other polyfills as dependencies. If the PHPCompatibility project offers a dedicated ruleset for the polyfill dependency, that ruleset will be included in the ruleset for the higher level polyfill.
For example: As the
polyfill-php70
library declaresrandom_compat
as a dependency, thePHPCompatibilitySymfonyPolyfillPHP70
ruleset includes thePHPCompatibilityParagonieRandomCompat
ruleset.In practice, this means that if your project uses several polyfills, you can use the information in "Includes" to help you decide which rulesets to use.
-
- PHP 5.3+ for use with PHP_CodeSniffer 2.3.0+.
- PHP 5.4+ for use with PHP_CodeSniffer 3.0.2+.
Use the latest stable release of PHP_CodeSniffer for the best results. The minimum recommended version of PHP_CodeSniffer is version 2.6.0.
-
PHPCompatibility 9.0.0+.
-
PHPCompatibilityParagonie 1.0.0+.
-
PHPCompatibilityPasswordCompat 1.0.0+.
The only supported installation method is via Composer.
If you don't have a Composer plugin installed to manage the installed_paths
setting for PHP_CodeSniffer, run the following from the command-line:
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev dealerdirect/phpcodesniffer-composer-installer:"^0.7" phpcompatibility/phpcompatibility-symfony:"*"
If you already have a Composer PHP_CodeSniffer plugin installed, run:
composer require --dev phpcompatibility/phpcompatibility-symfony:"*"
Next, run:
vendor/bin/phpcs -i
If all went well, you will now see that the PHPCompatibility and a range of PHPCompatibilitySymfony and other PHPCompatibility standards are installed for PHP_CodeSniffer.
Now you can use the following commands to inspect the code in your project for PHP cross-version compatibility:
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP54
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP55
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP56
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP70
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP71
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP72
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP73
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP74
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP80
# You can also combine the standards if your project uses several:
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP55,PHPCompatibilitySymfonyPolyfillPHP70,PHPCompatibilitySymfonyPolyfillPHP73
By default, you will only receive notifications about deprecated and/or removed PHP features.
To get the most out of the PHPCompatibilitySymfony rulesets, 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.
For example:
# For a project which should be compatible with PHP 5.3 up to and including PHP 7.0:
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP56 --runtime-set testVersion 5.3-7.0
# For a project which should be compatible with PHP 7.1 and higher:
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP73 --runtime-set testVersion 7.1-
For more detailed information about setting the testVersion
, see the README of the generic PHPCompatibility standard.
By default PHP_CodeSniffer will analyse PHP, JavaScript and CSS files. As the PHPCompatibility sniffs only target PHP code, you can make the run slightly faster by telling PHP_CodeSniffer to only check PHP files, like so:
./vendor/bin/phpcs -p . --standard=PHPCompatibilitySymfonyPolyfillPHP71 --extensions=php --runtime-set testVersion 5.3-
All code within the PHPCompatibility organisation is released under the GNU Lesser General Public License (LGPL). For more information, visit https://www.gnu.org/copyleft/lesser.html
PHPCompatibilitySymfonyPolyfillPHP80
ruleset: allow for polyfilledPhpToken
class, which was added inpolyfill-php80
version1.25.0
.- README: Updated the installation instructions for compatibility with Composer >= 2.2.
- Composer: The package will now identify itself as a static analysis tool. Thanks @GaryJones!
- Other housekeeping and minor documentation updates.
- Added new
PHPCompatibilitySymfonyPolyfillPHP80
ruleset. - The recommended version of the Composer PHPCS plugin is now
^0.7.0
, which offers compatibility with Composer 2.0. - The rulesets are now also tested against PHP 7.4 and 8.0. Note: full PHP 7.4 support is only available in combination with PHP_CodeSniffer >= 3.5.6. Note: runtime PHP 8.0 support is only available in combination with PHP_CodeSniffer >= 3.5.7, full support is expected in PHP_CodeSniffer 3.6.0.
PHPCompatibilitySymfonyPolyfillPHP72
ruleset: allow for four polyfilledPHP_FLOAT_*
constants, which were added inpolyfill-php72
version1.16.0
.
PHPCompatibilitySymfonyPolyfillPHP56
ruleset: allow for two polyfilled LDAP constants (undocumented in the Polyfill docs)- Composer: The recommended version of the Composer PHPCS plugin has been upped to
^0.6.0
.
PHPCompatibilitySymfonyPolyfillPHP72
ruleset: minor tweak to prevent false positive when the sniffs are run over the polyfill itself.- Minor bug fix in the integration test for the
PHPCompatibilitySymfonyPolyfillPHP72
ruleset.
- Added new
PHPCompatibilitySymfonyPolyfillPHP74
ruleset. - Updated the
PHPCompatibilitySymfonyPolyfillPHP73
ruleset to allow for the stub for theJsonException
class which was added inpolyfill-php73
version1.11.0
. - Composer: The recommended version of the Composer PHPCS plugin has been upped to
^0.5.0
. - CI: Added early warning system for false positives due to changes in the polyfill libraries themselves.
- Prevent false positives when the ruleset is run over the code of the polyfills themselves.
- The rulesets are now also tested against PHP 7.3. Note: full PHP 7.3 support is only available in combination with PHP_CodeSniffer 2.9.2 or 3.3.1+ due to an incompatibility within PHP_CodeSniffer itself.
Initial release of PHPCompatibilitySymfony containing rulesets covering the polyfill-php*
libraries.