PSR-2: Coding Style Guide
Die PSR-2 Spezifikation beinhaltet Vorgaben zur Formatierung einer PHP-Datei. Sich an diese Richtlinien zu halten, ist vor allem dann sinnvoll, wenn man mit anderen Leute zusammen an einem Projekt arbeitet. Halten sich alle an die gleichen Stilvorgaben, verschwendet niemand Zeit, sich erst in fremden Code einzulesen.
1. Allgemeines
Die erste Voraussetzung ist, dass sich der Code ebenfalls an die Vorgaben der PSR-1 Spezifikationen hält, welche sich mit dem allgemeinen Programmierstil befasst.
Weitere Vorgaben sind:
- Alle PHP-Dateien müssen den UNIX LF als Zeilenumbruch benutzen
- Die Datei muss mit einer Leerzeile abschließen
- Bei einer reinen PHP-Datei entfällt das schließende
?>
Tag - Einrückungen bestehen aus 4 Leerzeichen
- Keywords wie true, false und null werden klein geschrieben
- Nach der öffnenden Klammer und vor der schließenden keine Leerzeichen
- Befinden sich eine schließende Klammer und eine geschweifte öffnende Klammer in einer Zeile, so werden sie durch ein Leerzeichen getrennt
- Bei Aufzählungen kommt vor dem Komma kein Leerzeichen, danach schon
Zeilen
- Zeilen sollten nicht länger als 80 Zeichen sein
- Sie dürfen nicht länger als 120 Zeichen sein
- Keine Leerzeichen am Ende einer Zeile
- Nicht mehr als ein Statement pro Zeile
- Leerzeilen dürfen zum Zwecke der Übersichtlichkeit hinzugefügt werden
Namespaces und use-Deklarationen
- Nach namespace-Deklarationen muss eine Leerzeile folgen
- Alle use-Deklarationen stehen unterhalb der namespace-Deklaration
- Pro use-Deklaration muss ein use-Keyword benutzt werden
- Nach dem use-Block muss eine Leerzeile folgen
<?php
namespace Bereich\Package;
use EinInterface;
use IrgendeineKlasse as EineKlasse;
use AndererBereich\ZweitesPackage\MeineKlasse;
...
2. Klassen, Methoden und Attribute
- abstract und final-Deklarationen stehen der Sichtbarkeit-Deklaration voran
- Die static-Deklaration kommt nach der Sichtbarkeit
- Beim Aufruf einer Funktion kommt kein Leerzeichen zwischen den Methoden- oder Funktionsnamen und der öffnenden Klammer
Extends und implements
- Die Schlüsselwörter extends und implements müssen in der gleichen Zeile deklariert werden wie Klassenname
- Die öffnende geschweifte Klammer kommt in eine eigene Zeile
- Die schließende geschweifte Klammer kommt in die Zeile nach dem body
- Eine Liste von implements kann in mehrere Zeilen geschrieben werden, dabei muss jedes Element in eine eigene Zeile geschrieben werden
Attribute
- Bei allen Attributen muss die Sichtbarkeit angegeben werden
- Das var-Keyword darf nicht zum Deklarieren von Attributen benutzt werden
- Pro Statement darf nur ein Attribut deklariert werden
- Keine Präfixe benutzen, die die Sichtbarkeit eines Attributs wiedergeben
Methoden
- Bei allen Methoden muss die Sichtbarkeit angegeben werden
- Keine Präfixe verwenden, die die Sichtbarkeit einer Methode anzeigen sollen
- Nach dem Methodennamen kommt kein Leerzeichen, sondern sofort die öffnende Klammer
- Nach der öffnenden Klammer und vor der schließenden kommt kein Leerzeichen
- Die öffnende geschweifte Klammer kommt in eine eigene Zeile nach dem Methodennamen
- Die schließende geschweifte Klammer kommt in die Zeile nach dem Body der Methode
- Default-Argumente kommen ans Ende der Liste der Argumente
- Eine Liste von Argumenten kann wie bei implements über mehrere Zeilen geschrieben werden, dabei gilt: jedes Argument kommt in eine eigene Zeile
class NeueKlasse extends EineKlasse implements EinInterface
{
public function beispielFunktion($a, $b, $c = 2)
{
if ($a == $c) {
diesunddas();
} elseif ($b == $c) {
diesundjenes($b);
} else {
MeineKlasse::tudas($a, $b);
}
}
final public static function irgendwas()
{
machwas();
}
}
3. Kontrollstrukturen
- Nach dem Kontrollstruktur-Schlüsselwort kommt ein Leerzeichen
- Kein Leerzeichen nach der öffnenden und vor der schließenden Klammer
- Zwischen der schließenden Klammer und der öffnenden geschweiften Klammer muss ein Leerzeichen sein
- Der Körper der Kontrollstruktur muss einmal eingerückt sein
- Die schließende Klammer steht in der Zeile nach dem body
if-else
- Das else und das elseif befinden sich in der gleichen Zeile wie die geschweifte schließende Klammer des if-Körpers
- elseif sollte statt else if genutzt werden
switch-case
- Das case-Statement muss einmal eingerückt werden
- Der case-body wird noch einmal eingerückt, das break-keyword befindet sich auf der gleichen Ebene wie der body
- Wenn das break in einem nicht-leeren case weggelassen wird, muss ein Kommentar wie //no break eingefügt werden
4. Closures
- Closures müssen mit einem Leerzeichen nach dem function-keyword und einem vor und nach dem use-keyword deklariert werden
- Die öffnende geschweifte Klammer kommt in die gleiche Zeile wie die Deklaration
- Die schließende geschweifte Klammer kommt in die Zeile nach dem body
- Kein Leerzeichen nach der öffnenden Klammer oder der schließenden Klammer der Argumenten- Liste
Weitere Informationen sind auf der Seite http://www.php-fig.org/psr/psr-2/ von der PHP Framework Interop Group zu finden.