Nach sechs Jahren Entwicklung fand die erste stabile Veröffentlichung des statischen Analysewerkzeugs PHPStan 1.0 statt, das es ermöglicht, Fehler im PHP-Code zu finden, ohne ihn auszuführen und ohne Verwendung von Unit-Tests. Der Code des Projekts ist in PHP geschrieben und wird unter der MIT-Lizenz verbreitet.
Der Analysator bietet 10 Prüfungsstufen, wobei jede nachfolgende Stufe die Möglichkeiten der vorherigen erweitert und strengere Überprüfungen ermöglicht:
Beispiele für erkennbare grundlegende Probleme:
- Existenz von Klassen, die in instanceof, catch, Typehints und anderen Sprachkonstrukten verwendet werden.
- Existenz und Verfügbarkeit aufrufbarer Methoden und Funktionen sowie die Anzahl der übergebenen Argumente.
- Überprüfung, ob die Methode Daten mit dem gleichen Typ zurückgibt, wie er im return-Ausdruck definiert ist.
- Existenz und Sichtbarkeit der Eigenschaften, auf die zugegriffen wird, sowie die Überprüfung der deklarierten und tatsächlichen Datentypen, die in den Eigenschaften verwendet werden.
- Korrektheit der Anzahl der Parameter, die in den sprintf/printf-Aufrufen im Formatierungsblock für Strings übergeben werden.
- Existenz von Variablen unter Berücksichtigung der Blöcke, die durch Verzweigungsoperatoren und Schleifen gebildet werden.
- Nutzlose Typumwandlungen (z. B. '(string) 'foo'') und strenge Überprüfungen ('===' und '!==') von Daten mit unterschiedlichen Typen und Operanden, die immer false zurückgeben.
Wesentliche Neuerungen in PHPStan 1.0:
- Die Prüfungsebene "9" wurde implementiert, die Prüfungen für den Typ "mixed" durchführt, um die Annahme von Funktionsparametern mit unterschiedlichen Typen zu ermöglichen. Die neunte Ebene erkennt unsichere Verwendungen von "mixed", wie z. B. die Übergabe von Werten mit dem Typ "mixed" an einen anderen Typ, den Aufruf von Methoden mit dem Typ "mixed" und den Zugriff auf seine Eigenschaften, da diese möglicherweise nicht existieren.
- Verwaltung der Identitätsprüfung zurückgegebener Werte für identische Funktionsaufrufe unter Verwendung der Annotationen @phpstan-pure und @phpstan-impure.
- Typanalyse in try-catch-finally-Konstruktionen unter Verwendung der Annotation @throws.
- Erkennung bestimmter, aber nicht verwendeter interner (private) Eigenschaften, Methoden und Konstanten.
- Übertragung inkompatibler Callback-Aufrufe in Array-Verarbeitungsfunktionen wie array_map und usort.
- Inspektion der Typen für fehlende Typehint-Annotationen.
- Die Kompatibilität von Typbeschreibungen mit PHPDocs wurde sichergestellt, was die Verwendung von Typen aus Fehlermeldungen in PHPDocs ermöglicht.
Quelle: opennet.ru
