Nach sechs Jahren Entwicklungszeit ist die erste stabile Veröffentlichung des statischen Analysers PHPStan 1.0 erschienen, der es Ihnen ermöglicht, Fehler im PHP-Code zu finden, ohne ihn auszuführen und Unit-Tests zu verwenden. Der Projektcode ist in PHP geschrieben und wird unter der MIT-Lizenz vertrieben.
Der Analysator bietet 10 Verifizierungsstufen, wobei jede nachfolgende Stufe die Fähigkeiten der vorherigen erweitert und strengere Prüfungen ermöglicht:
Beispiele für zugrunde liegende Probleme, die identifiziert wurden:
- Vorhandensein von Klassen, die in „Instanceof“, „Catch“, „Typehints“ und anderen Sprachkonstrukten verwendet werden.
- Existenz und Verfügbarkeit aufgerufener Methoden und Funktionen sowie die Anzahl der übergebenen Argumente.
- Überprüfen, ob eine Methode Daten mit demselben Typ zurückgibt, der in der Return-Anweisung definiert ist.
- Existenz und Sichtbarkeit der Eigenschaften, auf die zugegriffen wird, und Validierung der deklarierten und tatsächlichen Datentypen, die in den Eigenschaften verwendet werden.
- Die Richtigkeit der Anzahl der Parameter, die im String-Formatierer an sprintf/printf-Aufrufe übergeben werden.
- Die Existenz von Variablen unter Berücksichtigung von Blöcken, die durch Verzweigungsoperatoren und Schleifen gebildet werden.
- Nutzlose Typumwandlungen (wie „(string) ‚foo‘“) und strenge Prüfungen („===" und „!==") für Daten mit unterschiedlichen Typen und Operanden, die immer „false“ zurückgeben.
Wichtigste Neuerungen von PHPStan 1.0:
- Es ist die Prüfstufe „9“ implementiert, die die Verwendung des Typs „gemischt“ prüft, der dazu gedacht ist, den Empfang von Parametern unterschiedlichen Typs durch die Funktion zu organisieren. Die neunte Ebene deckt die unsichere Verwendung von „mixed“ auf, z. B. das Übergeben von Werten vom Typ „mixed“ an einen anderen Typ, das Aufrufen von Methoden vom Typ „mixed“ und den Zugriff auf dessen Eigenschaften, weil diese möglicherweise nicht vorhanden sind.
- Steuern der Rückgabewert-Identitätsprüfungen für identische Funktionsaufrufe mithilfe der Annotationen @phpstan-pure und @phpstan-impure.
- Typanalyse in Try-Catch-finally-Konstrukten mithilfe von @throws-Annotationen.
- Identifizierung definierter, aber nicht verwendeter interner (privater) Eigenschaften, Methoden und Konstanten.
- Übergabe inkompatibler Rückrufe an Array-Funktionen wie array_map und usort.
- Typprüfung auf fehlende Typehint-Anmerkungen.
- Typdeklarationen wurden mit PHPDocs kompatibel gemacht, sodass PHPDocs Typen aus Fehlermeldungen verwenden kann.
Source: opennet.ru