PHP-Code in Sublime Text 3 nach PSR-2-Standard formatieren (und auf Fehler prüfen)

25. Juni 2018 | Ca. 6 Minuten Lesedauer

Wer häufig PHP-Code in Sublime Text schreibt und diesen nach PSR-2-Standards formatieren will, kann auf das Build System von Sublime Text zurückgreifen und sich die Arbeit damit deutlich erleichtern. Hier erkläre ich in Kürze die nötigen Schritte.

Am Anfang stellt sich die Frage: Wieso sollte man seinen PHP-Code eigentlich nach einem bestimmten Standard formatieren? Die Antwort in aller Kürze ist, dass es die Lesbarkeit des Codes im Allgemeinen erhöht.

Best Practices für die Formatierung werden durch die Einhaltung eines Standards über verschiedene Entwickler und Projekte hinweg eingehalten, so dass sich neue Entwickler zum einen schneller einlesen können, man sich aber auch an diese „Standardschreibweise“ gewöhnt und damit fremden Code schneller auffassen kann.

Grundsätzlich also ein sinnvolles Vorhaben, das durch die „Framework Interoperability Group“ vorangetrieben wird. PSR steht dabei für „PHP Standard Recommendation“, Version 2 dieses Standards ist die aktuell gültige, die als Maßstab für PHP-Entwickler dienen sollte.

Um unseren Code automatisch auf diese Weise zu formatieren, kommt das PHP-CS-Fixer-Paket zum Einsatz.

System vorbereiten

Ich setze darauf, dass auf einem Rechner mit mac OS homebrew oder etwas ähnliches als Paketmanager installiert ist, Windows-Nutzer müssen entsprechend schauen, wie sie die benötigten Pakete installiert bekommen.

Als Basis sollte man eine aktuelle Version von PHP installieren. Sollte PHP auf dem System bereits installiert sein, lässt sich mit dem Aufruf von php --version im Terminal prüfen, welche Version installiert ist.

Der PHP-CS-Fixer benötigt mindestens PHP 5.6.0, aber PHP 7 bringt einiges an Performance-Verbesserungen mit, die man nach Möglichkeit nutzen sollte.

brew unlink php56
brew install php72

Dies würde ein PHP 5.6.0 deinstallieren und stattdessen ein frisches PHP 7.2 installieren. Die Versionsnummern muss man gegebenenfalls entsprechend anpassen.

Anschließend kann PHP-CS-Fixer heruntergeladen, ausführbar gemacht und an einen sicheren (wie ein „wird nicht aus Versehen gelöscht“) Ort verschoben werden:

wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
sudo chmod a+x php-cs-fixer
sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer

Wer jetzt php-cs-fixer im Terminal eingibt, sollte eine Rückmeldung vom frisch installierten PHP-CS-Fixer erhalten.

Integration in Sublime Text 3

Sublime Text 3 bringt ein integriertes Build System mit, das verschiedene Aktionen auf einer geöffneten Datei oder einem Projekt ausführen kann. Einige Presets finden sich bereits unter Tools -> Build System, aber darunter ist keines für PHP nach PSR-2-Standard.

Wir klicken also unten auf „New Build System“ und ein Editorfenster öffnet sich. Hier ist bereits ein grundlegendes Template angelegt, das wir mit folgendem Inhalt überschreiben:

{
    "shell_cmd": "php-cs-fixer fix $file --rules=@PSR2"
}

Die Datei speichern wir unter einem eindeutigen Namen, PHP-PSR-2.sublime-build wäre eine gute Option, und das Ganze sollte jetzt als neues Build System in der zuvor erwähnten Liste auftauchen. Einmal auf unser PHP-PSR-2 klicken, sofern noch nicht ausgewählt, um es als Standard-System auszuwählen

Wenn man jetzt in einer geöffneten PHP-Datei Command + B drückt, nimmt der PHP-CS-Fixer seine Arbeit auf und formatiert den Code nach PSR-2-Standard, wo nötig, neu.

Bonus: PHP-Datei auf Fehler prüfen

Der PHP-CS-Fixer ist super geeignet um den Code zu formatieren, aber Fehler im Code, zum Beispiel fehlende Parameter, wird er nicht erkennen. Da wir allerdings eine vollständige Version von PHP installiert haben, können wir uns das integrierte Werkzeug zum linten, also untersuchen des Codes im statischen Zustand, zunutze machen.

Dafür erweitern wir unser Build System um den Aufruf des PHP Linters:

{
    "shell_cmd": "php-cs-fixer fix $file --rules=@PSR2 && php -l $file"
}

Wenn wir unser Build System jetzt laufen lassen (Build-Datei natürlich vorher speichern), dann wird nach der Code-Formatierung immer auch eine Prüfung durchgeführt, die eventuelle Fehler frühzeitig meldet.

Photo by Henri L. on Unsplash