
phpmnd est un outil qui vise à vous aider à détecter les nombres magiques dans votre code PHP. Par défaut, 0 et 1 ne sont pas considérés comme des nombres magiques.
Un nombre magique est un littéral numérique qui n'est pas défini comme une constante, mais qui peut changer à un stade ultérieur, et peut donc être difficile à mettre à jour. Il est considéré comme une mauvaise pratique de programmation d'utiliser des numéros directement dans n'importe quel code source sans explication. Dans la plupart des cas, cela rend les programmes plus difficiles à lire, à comprendre et à maintenir.
Considérez le code hypothétique suivant:
class Foo
{
public function setPassword ( $ password )
{
// don't do this
if ( mb_strlen ( $ password ) > 7 ) {
throw new InvalidArgumentException ( " password " );
}
}
}qui devrait être refactorisé à:
class Foo
{
const MAX_PASSWORD_LENGTH = 7 ; // not const SEVEN = 7 :)
public function setPassword ( $ password )
{
if ( mb_strlen ( $ password ) > self :: MAX_PASSWORD_LENGTH ) {
throw new InvalidArgumentException ( " password " );
}
}
}Cela améliore clairement la lisibilité du code et réduit également son coût de maintenance.
Bien sûr, tous les chiffres littéraux ne sont pas un numéro magique.
$ is_even = $ number % 2 === 0Certes, dans ce cas, le numéro 2 n'est pas un nombre magique.
Ma règle d'or:
If the number came from business specs and is used directly - it's a magic number.
Vous pouvez ajouter cet outil en tant que dépendance de développement locale par rapport à votre projet en utilisant le compositeur:
$ composer require --dev povils/phpmnd Ensuite, vous pouvez ensuite l'invoquer à l'aide de l'exécutable vendor/bin/phpmnd .
Pour l'installer à l'échelle mondiale, il est simplement exécuté:
$ composer global require povils/phpmnd Assurez-vous ensuite que vous disposez du répertoire des binaires Global Composer sur votre PATH . Exemple pour certains systèmes UNIX:
$ export PATH= " $PATH : $HOME /.composer/vendor/bin " 
$ phpmnd wordpress --ignore-numbers=2,-1 --ignore-funcs=round,sleep --exclude=tests --progress
--extensions=default_parameter,-return,argument L'option --allow-array-mapping permet aux touches en tant que chaînes lors de l'utilisation d'extension "Array".
L'option --exclude-file exclura un fichier de l'analyse de code. Plusieurs valeurs sont autorisées.
L'option --exclude-path exclura un chemin, qui doit être relatif à la source, à partir de l'analyse de code. Plusieurs valeurs sont autorisées.
L'option --exclude exclura un répertoire, qui doit être relatif à la source, à partir de l'analyse de code. Plusieurs valeurs sont autorisées (par exemple --exclude = tests --exclude = exemples).
L'option --extensions vous permet d'étendre l'analyse du code. Les extensions fournies doivent être séparées par les virgules.
L'option --hint suggèrera des remplacements pour les numéros magiques en fonction de vos constantes de base de code.
L'option --ignore-funcs exclura une liste des fonctions séparées par les virgules de l'analyse de code, lors de l'utilisation de l'extension "Argument". Par défaut est intval , floatval , strval .
L'option --ignore-numbers exclura une liste de nombres séparés par les virgules de l'analyse de code.
L'option --ignore-strings exclura les chaînes de l'analyse de code, lors de l'utilisation de l'option "Strings".
L'option --include-numeric-string oblige les chaînes numériques telles que "1234" pour être également traitées comme un nombre.
L'option --progress affichera une barre de progression.
L'option --strings comprendra des chaînes de recherche littérale dans l'analyse du code.
L'option --suffixes configurera une liste séparée par des virgules d'extensions de nom de fichier de code source valides.
L'option --whitelist ne traitera que les fichiers répertoriés dans le fichier spécifié. Ceci est utile pour une analyse incrémentielle.
L'option --xml-output générera un rapport au format XML sur le chemin spécifié par l'option. Par défaut, il analyse les conditions, les instructions de retour et les cas de commutation.
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;Si les extensions commencent par un moins, cela signifie que ceux-ci seront supprimés de l'analyse de code. Je recommanderais de nettoyer votre code en utilisant l'extension par défaut avant d'utiliser l'une de ces extensions.
Parfois, des numéros magiques sont nécessaires. Par exemple, implémentation d'une formule mathématique connue, par défaut intval , floatval et strval marquent un nombre comme non magique.
par exemple
$percent = $number / 100;
montrerait 100 comme un nombre magique
$percent = $number / intval(100);
Marquerait 100 comme non magique.
Veuillez consulter contribution.md pour plus d'informations.
La licence MIT (MIT). Veuillez consulter la licence pour plus d'informations.