
phpmnd ist ein Tool, mit dem Sie magische Zahlen in Ihrem PHP -Code erkennen sollen. Standardmäßig werden 0 und 1 nicht als magische Zahlen angesehen.
Eine magische Zahl ist ein numerisches Literal, das nicht als Konstante definiert ist, aber sich zu einem späteren Zeitpunkt ändern kann und daher schwer zu aktualisieren ist. Es wird als schlechte Programmierpraxis angesehen, Zahlen in jedem Quellcode ohne Erklärung direkt zu verwenden. In den meisten Fällen erschwert dies die Programme schwieriger zu lesen, zu verstehen und zu warten.
Betrachten Sie den folgenden hypothetischen Code:
class Foo
{
public function setPassword ( $ password )
{
// don't do this
if ( mb_strlen ( $ password ) > 7 ) {
throw new InvalidArgumentException ( " password " );
}
}
}welches nach überarbeitet werden sollte:
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 " );
}
}
}Dies verbessert die Code -Lesbarkeit deutlich und verringert auch die Wartungskosten.
Natürlich ist nicht jede wörtliche Zahl eine magische Zahl.
$ is_even = $ number % 2 === 0In diesem Fall ist die Nummer 2 sicherlich keine magische Zahl.
Meine Faustregel:
If the number came from business specs and is used directly - it's a magic number.
Sie können dieses Tool als lokale, pro-project-Entwicklungsabhängigkeit zu Ihrem Projekt hinzufügen, indem Sie einen Komponisten verwenden:
$ composer require --dev povils/phpmnd Anschließend können Sie es dann mit dem ausführbaren vendor/bin/phpmnd aufrufen.
Um es global zu installieren, werden einfach ausgeführt:
$ composer global require povils/phpmnd Stellen Sie anschließend sicher, dass Sie das Verzeichnis Global Composer Binaries auf Ihrem PATH haben. Beispiel für einige Unix -Systeme:
$ 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 Die Option --allow-array-mapping Option erlaubt Tasten als Zeichenfolgen bei der Verwendung von "Array" -Eränge.
Die Option --exclude-file schließt eine Datei aus der Codeanalyse aus. Mehrere Werte sind zulässig.
Die Option --exclude-path Option schließt einen Pfad aus, der relativ zur Quelle sein muss, aus der Codeanalyse. Mehrere Werte sind zulässig.
Die Option --exclude Option schließt ein Verzeichnis aus, das sich in Bezug auf die Quelle aus der Codeanalyse beziehen muss. Mehrere Werte sind zulässig (z. B. exclude = tests -exclude = Beispiele).
Mit der Option --extensions können Sie die Codeanalyse erweitern. Die bereitgestellten Erweiterungen müssen das Komma getrennt sein.
Die Option --hint schlägt Ersatz für magische Zahlen vor, die auf Ihren Codebasiskonstanten basieren.
Die Option --ignore-funcs ENTWORTEN EINE LISTE DER KOMMA-TRELLIERTE FUNKTIONEN AUS DER CODE-Analyse, wenn die Erweiterung "Argument" verwendet wird. Standardeinstellungen zu intval , floatval , strval .
Die Option --ignore-numbers Option schließt eine Liste von mit Kommas getrennten Nummern aus der Codeanalyse aus.
Die Option --ignore-strings wird Strings aus der Codeanalyse ausschließen, wenn die Option "Zeichenfolgen" verwendet wird.
Die Option --include-numeric-string Option erzwingt numerische Zeichenfolgen wie "1234", auch als Zahl behandelt zu werden.
Die Option --progress zeigt eine Fortschrittsleiste an.
Die Option --strings enthält Strings Literal -Suche in der Codeanalyse.
Die Option --suffixes konfiguriert eine von der Kommas getrennte Liste gültiger Quellcode -Dateiname -Erweiterungen.
Die Option --whitelist verarbeitet nur die in der angegebenen Datei aufgeführten Dateien. Dies ist nützlich für die inkrementelle Analyse.
Die Option --xml-output generiert einen Bericht in einem XML-Format zu dem von der Option angegebenen Pfad. Standardmäßig analysiert es Bedingungen, Rückgabeberechnungen und Schaltfälle.
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;Wenn Erweiterungen mit einem Minus beginnen, bedeutet dies, dass diese aus der Codeanalyse entfernt werden. Ich würde empfehlen, Ihren Code mit der Standardverlängerung zu bereinigen, bevor Sie diese Erweiterungen verwenden.
Manchmal sind magische Zahlen erforderlich. Beispielsweise implementieren Sie eine bekannte mathematische Formel standardmäßig intval , floatval und strval eine Zahl als nicht magisch.
z.B
$percent = $number / 100;
würde 100 als magische Zahl zeigen
$percent = $number / intval(100);
würde 100 als nicht magisch markieren.
Weitere Informationen finden Sie unter Mitarbeit.md.
Die MIT -Lizenz (MIT). Weitere Informationen finden Sie unter Lizenz.