Il s'agit d'un ensemble de détections pour PHP CodeSniffer qui vérifie la compatibilité entre versions de PHP. Il vous permettra d'analyser la compatibilité de votre code avec les versions supérieures et inférieures de PHP.
testVersion
dans l'ensemble de règles par rapport à la ligne de commandeLe projet vise à couvrir toutes les modifications de compatibilité PHP introduites depuis PHP 5.0 jusqu'à la dernière version de PHP. Il s’agit d’un processus continu et la couverture n’est pas encore à 100 % (si tant est qu’elle puisse l’être un jour). Les progrès sont suivis sur notre outil de suivi des problèmes GitHub.
Les demandes d'extraction qui vérifient les problèmes de compatibilité dans le code PHP 4 - en particulier entre PHP 4 et PHP 5.0 - sont les bienvenues car il existe encore des situations dans lesquelles les utilisateurs ont encore besoin d'aide pour mettre à niveau les systèmes existants. Cependant, la couverture des changements introduits avant PHP 5.1 restera inégale car les analyses à ce sujet ne sont pas activement développées pour le moment.
Les sniffs sont conçus pour donner les mêmes résultats quelle que soit la version de PHP que vous utilisez pour exécuter PHP CodeSniffer. Vous devriez obtenir des résultats cohérents quelle que soit la version de PHP utilisée dans votre environnement de test, mais pour de meilleurs résultats, il est recommandé d'exécuter les sniffs sur une version récente de PHP en combinaison avec une version récente de PHP_CodeSniffer.
Depuis la version 8.0.0, le standard PHPCompatibility peut également être utilisé avec PHP CodeSniffer 3.x. Depuis la version 9.0.0, la prise en charge de PHP CodeSniffer 1.5.x et des versions basses 2.x < 2.3.0 a été abandonnée. Depuis la version 10.0.0, la prise en charge de PHP < 5.4 et PHP CodeSniffer < 3.10.0 a été supprimée.
Merci à tous les contributeurs pour leurs précieuses contributions.
Merci à WP Engine pour son support sur les sniffs PHP 7.0.
Cette bibliothèque a été réorganisée. Tous les sniffs ont été classés en catégories et un nombre important de sniffs ont été renommés.
Si vous utilisez le standard PHPCompatibility
complet sans directives exclude
dans un ensemble de règles personnalisé et n'utilisez pas (encore) le nouveau style d'annotation PHP_CodeSniffer tel qu'introduit dans PHP_CodeSniffer 3.2.0, cela n'aura aucun effet notable et tout devrait fonctionner comme avant.
Cependant, si vous utilisez des directives exclude
pour les sniffs PHPCompatibility dans un ensemble de règles personnalisé ou si vous utilisez les annotations en ligne PHP_CodeSniffer de nouveau style, vous devrez les mettre à jour lors de la mise à niveau. Il ne devrait s'agir que d'un changement ponctuel. Le journal des modifications contient des informations détaillées sur tous les renommements sniff.
Veuillez lire attentivement le journal des modifications de la version 9.0.0 avant la mise à niveau.
require-dev
de votre fichier composer.json
. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
Si PHPCompatibility est le seul standard PHP CodeSniffer externe que vous utilisez, vous pouvez ajouter ce qui suit à votre fichier composer.json
pour exécuter automatiquement la commande nécessaire :
"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 "
}
Alternativement - et fortement recommandé si vous utilisez plusieurs standards PHP CodeSniffer externes - vous pouvez utiliser l'un des plugins Composer suivants pour gérer cela pour vous.
Ajoutez simplement le plugin Composer que vous préférez à la section require-dev
de votre fichier composer.json
.
Comme dernière alternative si vous utilisez un ensemble de règles personnalisé, vous pouvez indiquer à PHP CodeSniffer le chemin d'accès au standard PHPCompatibility en ajoutant l'extrait suivant à votre ensemble de règles personnalisé :
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
pour installer à la fois PHP CodeSniffer, le standard de codage PHPCompatibility et - éventuellement - le plugin Composer../vendor/bin/phpcs -i
sur la ligne de commande. PHPCompatibility doit être répertorié comme l'un des standards disponibles../vendor/bin/phpcs -p . --standard=PHPCompatibility
Installez PHP CodeSniffer via votre méthode préférée.
PHP CodeSniffer propose une variété de méthodes d'installation adaptées à votre flux de travail : Composer, PEAR, un fichier Phar, des archives de version compressées/tarrées ou une extraction du référentiel à l'aide de Git.
Conseil de pro : enregistrez le chemin d'accès à PHPCS dans la variable d'environnement $PATH
de votre système pour rendre la commande phpcs
disponible depuis n'importe où dans votre système de fichiers.
Téléchargez la dernière version de PHPCompatibility et décompressez-la/décompressez-la dans un répertoire arbitraire.
Vous pouvez également choisir de cloner le référentiel à l'aide de git pour mettre à jour facilement et régulièrement votre installation.
Ajoutez le chemin du répertoire dans lequel vous avez placé votre copie du dépôt PHPCompatibility à la configuration PHP CodeSniffer à l'aide de la commande ci-dessous depuis la ligne de commande :
phpcs --config-set installed_paths /path/to/PHPCompatibility
Autrement dit, si vous avez placé le référentiel PHPCompatibility
dans le répertoire /my/custom/standards/PHPCompatibility
, vous devrez ajouter ce répertoire à la variable de configuration PHP CodeSniffer installed_paths
.
Avertissement :installed_paths
écrase tous les installed_paths
précédemment définis. Si vous avez déjà défini installed_paths
pour d'autres standards externes, exécutez d'abord phpcs --config-show
, puis exécutez la commande installed_paths
avec tous les chemins dont vous avez besoin séparés par des virgules, c'est-à-dire :
phpcs --config-set installed_paths /path/1,/path/2,/path/3
Conseil de pro : Alternativement, si vous utilisez un ensemble de règles personnalisé, vous pouvez indiquer à PHP CodeSniffer le chemin d'accès aux normes de compatibilité PHP en ajoutant l'extrait suivant à votre ensemble de règles personnalisé :
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
Vérifiez que la norme PHPCompatibility est correctement enregistrée en exécutant phpcs -i
sur la ligne de commande. PHPCompatibility doit être répertorié comme l'un des standards disponibles.
Vous pouvez maintenant utiliser la commande suivante pour inspecter votre code :
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
.testVersion
à vérifier. Cela permettra de vérifier à la fois les fonctionnalités PHP obsolètes/supprimées ainsi que la détection de code utilisant les nouvelles fonctionnalités PHP.--runtime-set testVersion 5.5
à votre commande de ligne de commande.--runtime-set testVersion 5.3-5.5
.--runtime-set testVersion 7.0-
pour exécuter toutes les vérifications pour PHP 7.0 et supérieur.--report-full=path/to/report-file
. Pour plus d'informations et d'autres options de création de rapports, consultez le wiki PHP CodeSniffer.Depuis mi-2018, un ensemble limité d’ensembles de règles spécifiques au framework/CMS est disponible. Ces ensembles de règles sont hébergés dans leurs propres référentiels.
PHPCompatibilityJoomla
GitHub | PackagistePHPCompatibilityWP
GitHub | PackagisteDepuis l'automne 2018, un certain nombre de règles spécifiques au polyfill PHP sont également disponibles :
PHPCompatibilityPasswordCompat
GitHub | Packagist : compte pour la bibliothèque polyfill password_compat
de @ircmaxell.PHPCompatibilityParagonie
GitHub | Packagist : contient deux ensembles de règles qui représentent respectivement les bibliothèques polyfill Paragonie random_compat
et sodium_compat
.PHPCompatibilitySymfony
GitHub | Packagist : contient un certain nombre d'ensembles de règles qui prennent en compte diverses bibliothèques PHP polyfill proposées par le projet Symfony. Pour plus de détails sur les ensembles de règles disponibles, veuillez consulter le README du référentiel PHPCompatibilitySymfony. Si vous voulez vous assurer que tous les ensembles de règles PHPCompatibility sont disponibles à tout moment, vous pouvez utiliser le package PHPCompatibilityAll
GitHub | Packagiste.
IMPORTANT : les ensembles de règles spécifiques à Framework/CMS/Polyfill ne définissent pas la version minimale de PHP pour votre projet, vous devrez donc toujours passer une testVersion
pour obtenir les résultats les plus précis.
Comme avec n'importe quel standard PHP CodeSniffer, vous pouvez ajouter PHPCompatibility à un ensemble de règles PHP CodeSniffer personnalisé.
<? 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 >
Vous pouvez également définir la testVersion
à partir de l'ensemble de règles :
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />
D'autres options avancées, telles que la modification du type de message ou de la gravité des reniflements de sélection, comme décrit dans la page wiki de l'ensemble de règles annotées PHPCS, sont bien entendu également prises en charge.
testVersion
dans l'ensemble de règles par rapport à la ligne de commande Dans PHPCS 3.2.0 et versions antérieures, une fois que vous avez défini la testVersion
dans l'ensemble de règles, vous ne pouvez plus la remplacer depuis la ligne de commande. À partir de PHPCS 3.3.0, une testVersion
définie via la ligne de commande remplacera la testVersion
dans l'ensemble de règles.
Cela permet plus de flexibilité lorsque, par exemple, votre projet doit être conforme à PHP 5.5-
, mais que vous disposez d'un fichier d'amorçage qui doit être compatible avec PHP 5.2-
.
A ce moment, il y a deux sniffs qui ont une propriété qui peut être définie via l'ensemble de règles. D'autres propriétés personnalisées pourraient être disponibles à l'avenir.
Le sniff PHPCompatibility.Extensions.RemovedExtensions
vérifie les extensions supprimées en fonction du préfixe de fonction utilisé pour ces extensions. Cela pourrait entrer en conflit avec les fonctions utilisateur utilisant le même préfixe de fonction.
Pour ajouter des fonctions utilisateur à la liste blanche, vous pouvez transmettre une liste de noms de fonctions délimités par des virgules au sniff.
<!-- 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 >
Le reniflage PHPCompatibility.Interfaces.RemovedSerializable
doit connaître toutes les interfaces qui étendent l'interface Serializable
pour fournir les résultats les plus fiables. Le sniff avertira lorsqu'il rencontrera une interface étendant l'interface Serializable
qui est inconnue du sniff et recommandera que le nom de l'interface soit ajouté à la propriété.
Pour informer le sniff sur les interfaces supplémentaires fournissant l'interface Serialisable, ajoutez un extrait du type ci-dessous à votre ensemble de règles personnalisé :
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
Il existe des centaines de projets publics utilisant PHPCompatibility ou s'étendant par-dessus. Une courte liste de quelques-uns que vous pourriez connaître ou consulter :
Les contributions sont les bienvenues. Veuillez lire la documentation CONTRIBUANTE pour commencer.
Ce code est publié sous la licence GNU Lesser General Public License (LGPL). Pour plus d'informations, visitez http://www.gnu.org/copyleft/lesser.html