Never Code Alone Logo Never Code Alone
Blauer Elefantenumriss mit blauem PHP Schriftzug und grünem haken. Darunter die Schrift "CodeSniffer".

PHP CodeSniffer: Effektives Tool für sauberen und standardisierten PHP-Code

PHP CodeSniffer ist ein leistungsstarkes Tool, das euch hilft, euren PHP-Code automatisch auf Coding Standards zu prüfen und zu verbessern. Es unterstützt euch dabei, einheitlichen, lesbaren und wartbaren Code zu schreiben, insbesondere in großen Projekten mit vielen Entwicklern. In diesem Artikel zeigen wir euch, wie ihr PHP CodeSniffer effektiv in eurem Entwicklungsprozess einsetzen könnt.

Inhaltsverzeichnis

  1. Installation und Einrichtung
  2. Konfiguration und Anpassung
  3. Verwendung von PHP CodeSniffer
  4. Effektive Rules für große Projekte
  5. Effektive Rules für Code-Standardisierung
  6. Integration in CI/CD-Pipelines
  7. Häufig gestellte Fragen (FAQ)
  8. Fazit
  9. Weiterführende Ressourcen

Installation und Einrichtung

Die Installation von PHP CodeSniffer ist einfach. Am besten installiert ihr es global mit Composer:

Code:
          

composer global require squizlabs/php_codesniffer

Stellt sicher, dass das vendor/bin Verzeichnis in eurem PATH ist, damit ihr den phpcs Befehl überall ausführen könnt.

Konfiguration und Anpassung

PHP CodeSniffer wird mit einer Reihe vordefinierter Coding Standards wie PSR-1, PSR-2 und PSR-12 ausgeliefert. Ihr könnt aber auch eigene Standards definieren oder bestehende an eure Bedürfnisse anpassen.
Dazu erstellt ihr eine ruleset.xml Datei in eurem Projektverzeichnis:

Code:
          

<?xml version="1.0"?>
<ruleset name="MyStandard">
   <description>My custom coding standard</description>

   <!-- Include PSR-12 rules -->
   <rule ref="PSR12"/>
   
   <!-- Add or modify specific rules -->
   <rule ref="Generic.Files.LineLength">
       <properties>
           <property name="lineLimit" value="120"/>
           <property name="absoluteLineLimit" value="150"/>
       </properties>
   </rule>
</ruleset>

Verwendung von PHP CodeSniffer

Nach der Installation könnt ihr PHP CodeSniffer mit dem Befehl phpcs aufrufen, gefolgt vom Pfad zu eurem PHP-Code:

Code:
          

phpcs app/src

Mit der Option --report=summary erhaltet ihr eine Zusammenfassung der gefundenen Fehler und Warnungen.

Um Fehler automatisch zu korrigieren, verwendet ihr den Befehl phpcbf:
 

Code:
          

phpcbf app/src

Effektive Rules für große Projekte

Für große PHP-Projekte empfehlen wir die folgenden CodeSniffer-Rules, um die Codequalität, Wartbarkeit und Konsistenz sicherzustellen:

  • PSR12: Implementiert den PSR-12 Standard für konsistente Codeformatierung
  • Generic.PHP.ForbiddenFunctions: Verhindert die Verwendung unsicherer Funktionen
  • Generic.Metrics.CyclomaticComplexity: Begrenzt die Komplexität von Funktionen und Methoden
  • Generic.Commenting.DocComment: Erzwingt DocBlock-Kommentare für Funktionen und Klassen
  • Squiz.PHP.CommentedOutCode: Verhindert auskommentierten Code
  • Generic.Files.LineLength: Begrenzt die maximale Zeilenlänge für bessere Lesbarkeit

Effektive Rules für große Projekte

Für große PHP-Projekte empfehlen wir die folgenden CodeSniffer-Rules, um die Codequalität, Wartbarkeit und Konsistenz sicherzustellen:

  • PSR12: Implementiert den PSR-12 Standard für konsistente Codeformatierung
  • Generic.PHP.ForbiddenFunctions: Verhindert die Verwendung unsicherer Funktionen
  • Generic.Metrics.CyclomaticComplexity: Begrenzt die Komplexität von Funktionen und Methoden
  • Generic.Commenting.DocComment: Erzwingt DocBlock-Kommentare für Funktionen und Klassen
  • Squiz.PHP.CommentedOutCode: Verhindert auskommentierten Code
  • Generic.Files.LineLength: Begrenzt die maximale Zeilenlänge für bessere Lesbarkeit

Effektive Rules für Code-Standardisierung

Um einen einheitlichen und standardisierten Codestil in eurem Projekt durchzusetzen, empfehlen wir diese Rules:

  • Generic.NamingConventions.UpperCaseConstantName: 
    Konstanten müssen in Großbuchstaben geschrieben werden
  • PSR1.Classes.ClassDeclaration:
    Klassen müssen dem PSR-1 Standard folgen
  • PSR1.Methods.CamelCapsMethodName:
    Methodennamen müssen in CamelCase geschrieben werden
  • Generic.WhiteSpace.ScopeIndent:
    Einrückungen müssen konsistent sein
  • Squiz.Functions.MultiLineFunctionDeclaration: 
    Funktionsdeklarationen müssen einem einheitlichen Stil folgen
  • Generic.Arrays.DisallowLongArraySyntax: 
    Kurze Array-Syntax ([] statt array()) erzwingen

Integration in CI/CD-Pipelines

Um PHP CodeSniffer automatisch bei jedem Push oder Pull Request auszuführen, könnt ihr es in eure CI/CD-Pipeline integrieren. Hier ist ein Beispiel für GitLab CI:

Code:
          

code_sniffer:
 stage: test
 script:
   - composer install
   - vendor/bin/phpcs --report=junit --report-file=phpcs.result.xml
 artifacts:
   reports:
     junit: phpcs.result.xml

Häufig gestellte Fragen (FAQ)

Wie kann ich nur bestimmte Dateien oder Verzeichnisse prüfen?

Verwendet die Option --ignore=*/tests/*,*/vendor/* um Verzeichnisse auszuschließen oder gebt die gewünschten Dateien/Verzeichnisse direkt an.

Kann ich PHP CodeSniffer mit meiner IDE integrieren?

Ja, die meisten gängigen IDEs wie PhpStorm, VSCode oder Sublime Text haben Plugins oder native Unterstützung für PHP CodeSniffer.

Wie kann ich die Ausgabe von PHP CodeSniffer anpassen?

Mit der Option --report= könnt ihr verschiedene Ausgabeformate wie summary, full, json, junit wählen.

Kann ich PHP CodeSniffer nur auf geänderte Dateien in einem Git-Commit anwenden?

Ja, mit Hilfe von Tools wie git-phpcs könnt ihr PHP CodeSniffer nahtlos in euren Git-Workflow integrieren.

Wie kann ich benutzerdefinierte Regeln erstellen?

Ihr könnt eigene Regeln in PHP als sogenannte Sniffs definieren und in euer Ruleset einbinden. Mehr Infos dazu im CodeSniffer-Wiki.

Was ist der Unterschied zwischen Fehlern und Warnungen?

Fehler sind schwerwiegende Verletzungen des Coding Standards, während Warnungen stilistischer oder nicht kritischer Natur sind.

Wie kann ich bestimmte Regeln oder Checks deaktivieren?

In eurer ruleset.xml könnt ihr einzelne Regeln per <exclude name="..."/> ausschließen oder deren Schwellenwerte anpassen.

Kann PHP CodeSniffer auch Sicherheitslücken oder Bugs erkennen?

Nein, dafür sind spezielle Static Analysis oder Security Scanner wie PHPStan, Psalm oder RIPS nötig.

Wie halte ich PHP CodeSniffer auf dem neusten Stand?

Mit composer global update squizlabs/php_codesniffer könnt ihr jederzeit auf die aktuelle Version aktualisieren.

Wo finde ich weitere Informationen und Beispiele?

Die offizielle Dokumentation auf https://github.com/squizlabs/PHP_CodeSniffer enthält ein umfangreiches Wiki, FAQ und Beispiele.

Fazit

PHP CodeSniffer ist ein unverzichtbares Tool für PHP-Entwickler, um konsistenten, standardkonformen und qualitativ hochwertigen Code zu schreiben. Durch die Automatisierung der Code-Überprüfung und -Korrektur spart ihr wertvolle Zeit und stellt sicher, dass euer gesamtes Team denselben Best Practices folgt. Mit den richtigen Rules und der Integration in eure CI/CD-Pipeline hebt ihr eure Codequalität auf ein neues Level.

Wir bei PHP Ruhr Refactoring setzen PHP CodeSniffer bereits seit vielen Jahren in unseren eigenen Projekten und für unsere Kunden ein. Gerne unterstützen wir auch euch bei der optimalen Konfiguration und Anpassung an eure Anforderungen. Kontaktiert uns einfach für eine unverbindliche Beratung!

Weiterführende Ressourcen

CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.

Erreichen Sie unsere PHP Consultant Spezialisten

Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.