UX Audit

Wir trainieren dein Team? Buch unsere Workshops, Trainings und Coachings.

Zeigt her!
Close

Die Macht von PHPStan: Fehlererkennung und Codequalität in der PHP-Entwicklung

In der Welt der Webentwicklung ist die Qualität des Codes von entscheidender Bedeutung. Schlecht geschriebener Code kann zu Bugs, Sicherheitslücken und ineffizienter Leistung führen. PHPStan ist ein leistungsstarkes statisches Analysetool, das dazu beitragen kann, die Codequalität zu erhöhen und Bugs frühzeitig zu erkennen. In diesem Beitrag werden wir uns genauer ansehen, welche Arten von Fehlern PHPStan erkennen kann und welche Aufgaben möglicherweise andere Tools übernehmen müssen.

Bild

Welche Arten von Fehlern erkennt PHPStan?

PHPStan ist ein vielseitiges Werkzeug, das verschiedene Arten von Fehlern erkennen kann, darunter:

  • Typfehler: PHPStan kann Typfehler identifizieren, bei denen Variablen den falschen Datentyp haben oder fehlende Typdeklarationen vorliegen.
  • Undefinierte Variablen und Funktionen: Das Tool kann auf nicht deklarierte Variablen oder Funktionen hinweisen, wenn sie im Code verwendet werden.
  • Nicht verwendete Variablen und Funktionen: PHPStan hilft dabei, nicht verwendeten Code zu finden, der aus dem Projekt entfernt werden kann.
  • “Dead” Code: Es kann auf unerreichbaren Code hinweisen, der aufgrund von Bedingungen oder eines davorstehenden return Statements nie ausgeführt wird.
  • Stil und Konventionsverstöße: PHPStan kann auf stilistische und konventionelle Verstöße hinweisen, die den Coding-Standards widersprechen.
  • Performance-Optimierungen: In einigen Fällen kann PHPStan auf ineffiziente Codestellen hinweisen, obwohl es nicht primär für die Identifizierung von Leistungsproblemen ausgelegt ist.

Integration in automatisierte Deploy-Pipelines

Eine effektive Methode zur Sicherung der Codequalität ist die Integration von PHPStan in automatisierte Deploy-Pipelines. Dies ermöglicht es, den Code bei jeder Änderung automatisch zu überprüfen, bevor er in die Produktion gelangt. Dadurch wird sichergestellt, dass nur qualitativ hochwertiger und fehlerfreier Code in der Anwendung landet. Dies ist besonders hilfreich in neuen Projekten, um von Anfang an hohe Standards zu setzen.

Legacy-Projekte und PHPStan

Die Integration von PHPStan in Legacy-Projekten kann anfangs sehr zeitaufwändig sein. Die bestehende Codebase muss möglicherweise an die gewünschten PHPStan-Regeln angepasst werden. Dies kann eine Herausforderung sein, aber der langfristige Nutzen ist es wert. Alternativ können Entwickler:innen die Analyse des Legacy-Codes aussetzen und PHPStan nur für die Analyse neuer Features verwenden. Dies ermöglicht eine schrittweise Verbesserung der Codequalität.

PHPStan Levels im Überblick

PHPStan bietet verschiedene Analysestufen (Levels), die je nach Projektanforderungen und Komplexität ausgewählt werden können. Diese Levels sind von 0 bis 9 nummeriert, wobei Level 0 das grundlegendste und Level 9 das strengste ist.

Hier eine kurze Übersicht:

  • Level 0: Auf dieser Stufe führt PHPStan grundlegende Überprüfungen durch. Es erkennt unbekannte Klassen und Funktionen, prüft auf unbekannte Methodenaufrufe auf $this und überwacht fehlerhafte Argumente, die an diese Methoden und Funktionen übergeben werden. Des Weiteren wird noch die Verwendung von immer undefinierten Variablen überprüft.
  • Level 1: Auf dieser Stufe konzentriert sich PHPStan auf die Verwendung von Variablen, welche möglicherweise (also unter gewissen Bedingungen) undefiniert Variablen. Es wird nach unbekannten magischen Methoden und Eigenschaften in Klassen gesucht, die über __call und __get aufgerufen werden könnten.
  • Level 2: Hier erweitert PHPStan seine Untersuchung und überprüft unbekannte Methoden in allen Ausdrücken, nicht nur auf $this. Außerdem erfolgt eine Validierung der PHPDoc-Kommentare.
  • Level 3: PHPStan analysiert auf dieser Stufe die Rückgabetypen von Funktionen und Methoden sowie die zugewiesenen Typen für Eigenschaften.
  • Level 4: Dieses Level beinhaltet grundlegende Überprüfungen auf “toten” Code. PHPStan identifiziert Code, welcher durch immer falsche Bedingungen nicht ausgeführt wird und unerreichbaren Code, der nach einer return-Anweisung folgt.
  • Level 5: PHPStan untersucht auf dieser Stufe die Typen der an Methoden und Funktionen übergebenen Argumente und stellt sicher, dass sie den erwarteten Typen entsprechen.
  • Level 6: Hier werden fehlende Typhinweise im Code gemeldet, um sicherzustellen, dass alle Variablen und Funktionen mit den entsprechenden Typen dokumentiert sind.
  • Level 7: Auf dieser Stufe beginnt PHPStan, teilweise falsche Unionstypen zu melden. Wenn beispielsweise eine Methode aufgerufen wird, die nur für einige Typen in einem Unionstyp existiert, gibt Level 7 eine Warnung aus. Es erkennt auch andere möglicherweise inkorrekte Situationen.
  • Level 8: PHPStan meldet das Aufrufen von Methoden und den Zugriff auf Eigenschaften bei nullable Typen. Vor einem Aufruf auf nullable Objekt muss programmatisch sichergestellt sein, dass das Objekt bereits initialisiert wurde.
  • Level 9: Diese Stufe erzwingt eine strikte Handhabung des mixed-Typs. Die einzige erlaubte Operation mit diesem Typ ist das Weiterreichen an einen anderen mixed-Typ.
Bild
Screenshot PhPStan
Beim ersten (level2-no-static-errors.png) sieht man, dass PHPStan Level 2 erfolgreich validiert & keine Fehler mehr vorliegen.

Bild
Screenshot Level3 PHPStan
Beim strikteren prüfen mit Level 3 gibt’s dann einen Fehler, den man dann beheben kann.

Die Wahl des richtigen Levels hängt von den spezifischen Anforderungen und dem Entwicklungsstadium des Projekts ab.

Insgesamt ist PHPStan ein leistungsstarkes Werkzeug zur Verbesserung der Codequalität in PHP-Projekten. Mit der Integration in automatisierte Deploy-Pipelines und einer klugen Herangehensweise an Legacy-Code können Entwickler sicherstellen, dass ihre Anwendungen effizienter, sicherer und wartbarer werden. PHPStan ermöglicht es, die Codequalität auf das nächste Level zu heben und damit den Erfolg eines Projekts nachhaltig zu steigern.

PHPUnit als Ergänzung zu PHPStan

PHPUnit ist ein herausragendes Framework für das Unit-Testing in PHP, das sich ideal als Ergänzung zu PHPStan eignet. Während PHPStan die statische Codeanalyse und Typüberprüfung durchführt, konzentriert sich PHPUnit auf das Ausführen von Tests, um sicherzustellen, dass der Code die erwarteten Ergebnisse liefert. Die Kombination von PHPUnit und PHPStan bietet eine umfassende Lösung zur Qualitätssicherung in PHP-Projekten.

Die Vorteile von PHPUnit in Kombination mit PHPStan sind vielfältig. Durch Unit-Tests mit PHPUnit können Entwickler:innen sicherstellen, dass jede Komponente ihres Codes wie erwartet funktioniert, und dabei die von PHPStan identifizierten Typfehler und Codeprobleme berücksichtigen. Dies ermöglicht es, nicht nur fehlerfreien Code zu schreiben, sondern auch sicherzustellen, dass die Anwendung die gewünschte Funktionalität bietet. Darüber hinaus tragen automatisierte Tests dazu bei, die Codequalität im Laufe der Zeit aufrechtzuerhalten und sicherzustellen, dass Änderungen am Code keine unerwünschten Nebenwirkungen haben. Insgesamt ermöglicht die Kombination von PHPUnit und PHPStan eine höhere Zuverlässigkeit und Qualität von PHP-Anwendungen.

Habt ihr Erfahrung mit PHP Stan?
Schreibt uns gerne!

Du willst mit jemanden über das Thema plaudern?

Einen kostenlosen Termin mit CEO Susanne vereinbaren!

Daniel

Meine Rolle bei Liechtenecker: Backend Development🤓 Wenn es weder IT noch Digitalisierung gäbe, wäre mein Beruf: Musiker Mein Herz schlägt für: PHP Development, Progressive Metal, Kaffee
Bild
Header-Bild: Barrierefreiheit im Fokus
UX/UI Design – Blogbeitrag

Barrierefreiheit im Fokus

Spätestens seit dem neuen Barrierefreiheitsgesetzt kommt man um das Thema Accessibility nicht mehr herum. Und das ist auch gut so. Von der Berücksichtigung verschiedenster Bedürfnisse bis hin zur Umsetzung von WCAG-Richtlinien – lasst uns gemeinsam entdecken, warum eine inklusive Online-Erfahrung für alle unverzichtbar ist.

Jetzt lesen

Interesse mit uns zu arbeiten?

Lass uns plaudern …

oder vereinbare gleich mit unserer CEO Susanne einen kostenlosen Termin.