Nach sechs Jahren Entwicklungszeit fand die erste stabile Version des statischen Analysewerkzeugs PHPStan 1.0 statt, das es ermöglicht, Fehler im PHP-Code zu finden, ohne ihn auszuführen oder Unit-Tests zu benutzen. Der Code des Projekts ist in PHP geschrieben und wird unter der MIT-Lizenz verbreitet.
Der Analyzer bietet 10 Prüfungsstufen, bei denen jede nachfolgende Stufe die Möglichkeiten der vorherigen erweitert und strengere Prüfungen vornimmt:
Beispiele für erkannte grundlegende Probleme:
- Existenz von Klassen, die in instanceof, catch, Typehints und anderen Sprachkonstrukten verwendet werden.
- Existenz und Erreichbarkeit der aufrufbaren Methoden und Funktionen sowie der Anzahl der übergebenen Argumente.
- Überprüfung der Rückgabe von Methoden mit dem gleichen Typ, der in der return-Anweisung definiert ist.
- Existenz und Sichtbarkeit der Eigenschaften, auf die zugegriffen wird, sowie Ü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 übergeben werden.
- Existenz von Variablen unter Berücksichtigung der Blöcke, die durch Verzweigungs- und Schleifenoperatoren gebildet werden.
- Nutzlose Typumwandlungen (z. B. "(string) 'foo'" ) und strenge Vergleiche ("===" und "!==") von Daten mit unterschiedlichen Typen und Operanden, die immer den Wert false zurückgeben.
Schlüsselneuerungen in PHPStan 1.0:
- Die Implementierung des Prüfniveaus «9» führt Überprüfungen der Verwendung des Typs «mixed» durch, das für die Annahme von Parameterfunktionen mit unterschiedlichen Typen konzipiert ist. Das neunte Niveau identifiziert unsichere Verwendungsmuster von «mixed», wie z.B. die Übertragung von Werten des Typs «mixed» an einen anderen Typ, das Aufrufen von Methoden mit dem Typ «mixed» und den Zugriff auf seine Eigenschaften, da diese möglicherweise nicht existieren.
- Die Verwaltung der Identitätsprüfung der Rückgabewerte für identische Funktionsaufrufe unter Verwendung der Annotationen @phpstan-pure und @phpstan-impure.
- Typanalyse in try-catch-finally-Konstrukten unter Verwendung der Annotation @throws.
- Identifizierung bestimmter, jedoch ungenutzter interner (private) Eigenschaften, Methoden und Konstanten.
- Übertragung inkompatibler Callback-Aufrufe an Array-Verarbeitungsfunktionen wie array_map und usort.
- Überprüfung der Typen für fehlende typehint-Annotationen.
- Die Kompatibilität der Typbeschreibungen mit PHPDocs wurde sichergestellt, was die Verwendung von Typen aus Fehlermeldungen in PHPDocs ermöglicht.
Quelle: opennet.ru
