Il s'agit d'une collection de nos reniflements PHP_CODESNIFFER (3.X) personnalisés pour détecter les bogues potentiels et le comportement inattendu dans le code PHP. Il peut être utilisé comme un ensemble de règles en soi, mais il est principalement destiné à un ensemble de reniflements séparés qui peuvent être intégrés dans d'autres normes.
Nous avons décrit la motivation derrière certains de ces reniflements sur notre blog.
Installer comme dépendance de développement à l'aide du compositeur:
$ composer require --dev moxio/php-codesniffer-sniffs
Vérifiez vos fichiers par rapport à cet ensemble de reniflements:
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
Plus de reniflements seront ajoutés bientôt.
MOXIOSNIFFS.PHP.DISALLOWBARECONTINUNUEInSWitch : interdit l'instruction continue sans argument numérique lorsqu'il est utilisé directement dans un case de switch . Cela empêche les bogues silencieux causés par le PHP, considérant switch comme une structure en boucle.
MOXIOSNIFFS.PHP.DISALLOWIMPLICTIVERLOOSECOMPARISON : interdit les comparaisons implicites non-stricts par des fonctions comme in_array et array_search . Exige que le paramètre $strict à ces fonctions soit explicitement défini. Cela empêche les bogues cachés en raison du comportement contre-intuitif de la comparaison non stricte.
MOXIOSNIFFS.PHP.DISALLOWIMPLICTLOOSEBASE64DECODE : Désallèle Utilisation implicite non-stricte de la fonction base64_decode . Exige que le paramètre $strict de cette fonction soit explicitement défini.
MOXIOSNIFFS.PHP.DISALLOWUNIQIDWITHOTORMORDROPY : interdit les appels vers uniqid() sans $more_entropy = true . Lorsque $more_entropy est false (ce qui est la valeur par défaut), uniqid() appelle usleep() pour éviter les collisions, ce qui peut être un coup de performance substantiel. Toujours appeler uniqid() avec $more_entropy = true évite ces problèmes.
MOXIOSNIFFS.PHP.DisallowArrayCombiners withSingLearray: interdit les appels à des fonctions qui combinent deux tableaux ou plus avec un seul tableau donné comme argument. Cela s'applique à des fonctions comme array_merge(_recursive) , array_replace(_recursive) et toutes les variantes de array_diff et array_intersect . Un tel appel n'a pas de sens et est probablement le résultat d'une virgule ou d'une parenthèse mal placée. Pour réindexer un seul tableau, utilisez simplement array_values .
MOXIOSNIFFS.PHP.DISALLOWIMPLICTICMICROTIMEASSSTRING : Désactivez les appels à microtime() sans que l'argument $get_as_float soit explicitement défini. Par défaut, microtime a une chaîne comme valeur de retour ("MSEC SEC"), qui est inattendue et ne peut pas être chassée naïvement pour flotter, ce qui rend sa erreur. Il est toujours possible de définir cet argument sur false , mais dans ce cas, vous y avez probablement pensé.
MOXIOSNIFFS.PHP.DISALLOWIMPLICITITERATORATRAYWITHUSEKES : Désactivez les appels à iterator_to_array() sans que l'argument $use_keys soit explicitement défini. Par défaut, iterator_to_array utilise les clés fournies par l'itérateur. Ce comportement est souvent souhaité pour les tableaux associatifs, mais peut provoquer des résultats inattendus pour les tableaux de «liste». Exiger explicitement que le paramètre est défini garantit que le développeur doit réfléchir au comportement souhaité pour la situation à accomplir.
MOXIOSNIFFS.PHP.DISALLOWDATETime : interdit l'utilisation de DateTime et favorise l'utilisation de DateTimeImmutable à la place. Le premier être mutable peut conduire à des insectes subtils mais désagréables. Consultez cet article pour plus d'informations sur les raisons pour lesquelles vous voudriez décourager à l'aide de DateTime .
MOXIOSNIFFS.PHP.DISALLOWMBDETECTENCODING : interdit l'utilisation de mb_detect_encoding . Cette fonction a un nom trompeur qui implique qu'il peut réellement détecter le codage d'une chaîne, un problème qui est généralement impossible. Il vérifie plutôt une liste des encodages jusqu'à ce qu'il en trouve un qui pourrait être le bon (c'est-à-dire que la chaîne est une séquence d'octets valide selon ce codage). L'utilisation de mb_check_encoding (peut-être dans une boucle) rend cela beaucoup plus explicite. Voir cette conférence pour plus d'informations générales sur ce sujet.
MOXIOSNIFFS.PHP.DISALLOWUTF8EnCODEDECODE : Désactivez les appels vers utf8_encode() et utf8_decode() . Ces fonctions peuvent être considérées comme trompeuses car elles ne se convertissent qu'à / à partir d'ISO-8859-1, et ne détectent pas «comme par magie» le codage source / cible. L'utilisation iconv() ou mb_convert_encoding() fait à la place les deux codages de caractères qui jouent un rôle dans la conversion explicite.
Moxiosniffs.php.disallowdatecreatefromformatwithunspecifiedTimeComponent : Désalle des appels à DateTime::createFromFormat , DateTimeImmutable::createFromFormat , date_create_from_format & date_create_immutable_from_format avec les formats qui ne spécifient pas une componte temporelle et ne font pas de FIELDS avec NULLDS. Cela créerait autrement DateTime (immuable) des objets avec un composant temporel défini sur le temps actuel (création), qui n'est probablement jamais ce que vous voulez et peut être une source de bogues.
Après avoir installé des dépendances (y compris les dépendances de développement) à l'aide du compositeur, exécutez
$ ./vendor/bin/phpunit
à partir de la racine du projet Dir.
Ce projet adhère au versioning sémantique.
Veuillez noter que, du point de vue de cette bibliothèque en tant que collection de reniflements (et non d'une norme de codage complète), l'ajout de nouveaux reniflements ne sera pas considéré comme un changement de rupture et ne provoque donc pas une augmentation du numéro de version majeure.
Ces reniflements sont libérés sous la licence du MIT.