Dies ist eine Sammlung unserer benutzerdefinierten PHP_CODESNIFER (3.x) -Sniffs zum Erkennen potenzieller Fehler und unerwartetes Verhalten im PHP -Code. Es kann als Regeln für sich genommen verwendet werden, ist jedoch hauptsächlich als eine Reihe separater Schnüffels gedacht, die in andere Standards integriert werden können.
Wir haben die Motivation hinter einigen dieser Schnüffel in unserem Blog beschrieben.
Installieren Sie als Entwicklungsabhängigkeit mit Composer:
$ composer require --dev moxio/php-codesniffer-sniffs
Überprüfen Sie Ihre Dateien mit diesem Satz von Sniffs:
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
In Kürze werden weitere Schnüffler hinzugefügt.
Moxiosniffs.php.disallowBareContinUeInswitch : Verschleppt die continue ohne numerisches Argument case wenn sie direkt innerhalb eines switch verwendet werden. Dies verhindert stille Fehler, die durch PHP verursacht werden, wenn switch eine Schleifenstruktur ist.
Moxiosniffs.php.disallowimplicitlooseComparison : Impliziten nicht-strengen Vergleiche nach Funktionen wie in_array und array_search . Erfordert, dass der $strict -parameter zu diesen Funktionen explizit festgelegt ist. Dies verhindert versteckte Fehler aufgrund des kontraintuitiven Verhaltens des nicht strengen Vergleichs.
Moxiosniffs.php.disallowimplicitloosebase64Decode : Die implizite nicht-strenge Verwendung der base64_decode -Funktion. Erfordert, dass der $strict -parameter zu dieser Funktion explizit eingestellt ist.
Moxiosniffs.php.disallowuniqidWithoutmoreStropy : Aufrufe an uniqid() ohne $more_entropy = true . Wenn $more_entropy false ist (was die Standardeinstellung ist), ruft uniqid() usleep() auf, um Kollisionen zu vermeiden, was ein wesentlicher Leistungstreffer sein kann. Immer an uniqid() mit $more_entropy = true aufzurufen, vermeidet diese Probleme.
Moxiosniffs.php.disallowarraycombinerswithsinglearray : Aufrufe von Funktionen, die zwei oder mehr Arrays mit nur einem einzigen Array kombinieren, das als Argument angegeben wird. Dies gilt für Funktionen wie array_merge(_recursive) , array_replace(_recursive) und alle Varianten von array_diff und array_intersect . Ein solcher Anruf macht keinen Sinn und ist höchstwahrscheinlich ein Ergebnis eines fehlgeleiteten Kommas oder einer Klammung. Um ein einzelnes Array erneut zu indeminieren, verwenden Sie einfach array_values .
Moxiosniffs.php.disallowimPlictMicrotimeAsString : Aufrufe auf microtime() ohne das Argument $get_as_float explizit festgelegt. Standardmäßig hat microtime eine Zeichenfolge als Rückgabewert ("MSEC Sec"), die unerwartet ist und nicht naiv zum Schweben gegossen werden kann, was es fehleranfällig macht. Es ist immer noch möglich, dieses Argument auf false festzulegen, aber in diesem Fall haben Sie wahrscheinlich darüber nachgedacht.
Moxiosniffs.php.disallowimPlictIteratortoArrayWithuseKeys : Aufrufe an iterator_to_array() ohne dass das Argument $use_keys explizit festgelegt ist. Standardmäßig verwendet iterator_to_array die vom Iterator bereitgestellten Schlüssel. Dieses Verhalten wird häufig für assoziative Arrays erwünscht, kann jedoch unerwartete Ergebnisse für "listenähnliche" Arrays verursachen. Die ausdrückliche Erfordernis des festgelegten Parameters stellt sicher, dass der Entwickler darüber nachdenken muss, welches Verhalten für die jeweilige Situation erwünscht ist.
Moxiosniffs.php.disallowdatetime : Die Verwendung von DateTime nicht ausgeht und stattdessen die Verwendung von DateTimeImmutable fördert. Das erstere Wesen kann zu einigen subtilen, aber bösen Käfern führen. Weitere Informationen finden Sie in diesem Beitrag, warum Sie mit DateTime entmutigen möchten.
Moxiosniffs.php.disallowmbDectectCoding : Die Verwendung von mb_detect_encoding . Diese Funktion hat einen irreführenden Namen, der impliziert, dass sie tatsächlich die Codierung einer Zeichenfolge erkennen kann, ein Problem, das im Allgemeinen unmöglich ist. Vielmehr überprüft es eine Liste von Encodings, bis es eine findet, die das richtige sein könnte (dh die Zeichenfolge ist eine gültige Byte -Sequenz nach dieser Codierung). Wenn Sie mb_check_encoding (möglicherweise in einer Schleife) verwenden, ist dies stattdessen viel expliziter. Weitere Informationen zu diesem Thema finden Sie in diesem Vortrag.
Moxiosniffs.php.disallowutf8EneCodEdeCode : Aufrufe an utf8_encode() und utf8_decode() . Diese Funktionen können als irreführend angesehen werden, da sie nur zu/von ISO-8859-1 konvertieren und die Quelle/Ziel-Codierung nicht „magisch“ erkennen. Die Verwendung iconv() oder mb_convert_encoding() macht stattdessen beide Zeichenkodierungen, die eine Rolle bei der Konvertierung explizit spielen.
Moxiosniffs.php.disallowdatecreatefromFormatWithunspecifiedTimeComponent : date_create_from_format zu DateTime::createFromFormat , DateTimeImmutable::createFromFormat date_create_immutable_from_format Dies würde sonst datetime (unveränderliche) Objekte mit einer Zeitkomponente erstellen, die für die aktuelle (Erstellung) Zeit eingestellt ist, was wahrscheinlich nie das ist, was Sie wollen und eine Quelle von Fehler sein können.
Nach der Installation von Abhängigkeiten (einschließlich Entwicklungsabhängigkeiten) mit Composer rennen Sie
$ ./vendor/bin/phpunit
Aus dem Projekt Root Dir.
Dieses Projekt hält sich der semantischen Versionierung an.
Bitte beachten Sie, dass aus der Sicht dieser Bibliothek als Pick-and-Match-Sammlung von Schnüffeln (und nicht als vollständiger Codierungsstandard) die Hinzufügung neuer Schnüffel nicht als Breaking-Änderung angesehen wird und somit keine Zunahme der Hauptversionsnummer verursacht.
Diese Schnüffel werden unter der MIT -Lizenz veröffentlicht.