Aus PHP.de Wiki
Im Hinblick auf eine Einheitlichkeit und gute Verständlichkeit streben wir in allen Codefragmenten des Wikis einen einheitlichen Standard an. Die Ausnahme bilden fertige Tutorials (Neu-Autoren dürfen natürlich trotzdem Einheitlichkeit anstreben).
Allgemeine Notation
Zwischen Operanden und deren Operator steht immer ein Leerzeichen. Ausgenommen davon sind unäre Operatoren.
$var = 3;
$var < 5;
$var1 && $var2;
$var .= 'abc';
$var & 2;
$var = $var . 'abc';
// aber:
$var++;
++$var;
$var = -2;
Pro Zeile wird nur eine Anweisung notiert.
// falsch:
$var1 = $var2; $var3 = $var4;
// richtig:
$var1 = $var2;
$var3 = $var4;
Variablen und Konstanten
Variablennamen werden in camelCases notiert. Sie beginnen also mit einem Kleinbuchstaben und jedes weitere Wort wird mit einem Großbuchstaben angehängt.
Im Gegensatz dazu werden Konstanten durchgängig großgeschrieben. Einzelne Wörter werden mit Unterstrichen getrennt.
define('MY_CONSTANT', 'xyz'); Ausgenommen von dieser Konvention sind die Konstanten true, false und null, diese werden durchgängig kleingeschrieben.
$var1 = true;
$var2 = false;
$var3 = null;
Alle Bezeichner (Variablen, Konstanten, Klassen, Methoden etc.) bestehen aus englischen Wörtern und sollten selbstklärend sein.
Einrückungen
Code-Blöcke werden immer mit vier Leerzeichen eingerückt. Die Verwendung harter Tabs sollte vermieden werden. Besonders wichtig ist es jedoch, dass innerhalb einer Datei nicht gewechselt wird.
{
// Code-Block mit vier Leerzeichen eingerückt
}
Zeilenlänge
Eine Zeile sollte nicht mehr als 80 Zeichen lang sein. Dies stellt sicher, dass auch auf kleineren Bildschirmen noch die gesamte Zeile sichtbar ist und übermäßiges Scrolling vermieden wird.
Wenn eine Code-Zeile länger als 80 Zeichen ist, wird ein Umbruch eingefügt. Nach einer Einrückung wird die Code-Zeile fortgeführt.
Kontrollstrukturen
Wie bei den Sprachkonstrukten wird zwischen das Schlüsselwort und die öffnende runde Klammer ein Leerzeichen gesetzt. Nach der schließenden runden Klammer folgt wieder ein Leerzeichen und dann die öffnende geschweifte Klammer.
Geschweifte Klammern müssen immer geschrieben werden, auch wenn sie rein syntaktisch nicht notwendig wären!
Enhält ein Sprachkonstrukt weitere Notationen, so werden diese ebenfalls eingerückt (z.B. switch).
Ob für weitere Entscheidungszweige in if-Statements die Schreibweise elseif oder else if verwendet wird, bleibt dem Entwickler selbst überlassen. Da else if aber die weiter verbreitete Schreibweise ist, sollte diese vorgezogen werden.
Nach der öffnenden und vor der schließenden runden Klammern steht kein weiteres Leerzeichen.
if (/* Bedingung */) {
// ...
} else if (/* Bedingung */) {
// ...
} else {
// ...
} for ($i = 0; $i < 5; $i++) {
// ...
} switch ($i) {
case 1:
// ...
break;
case 2:
// ...
break;
default:
// ...
} do {
// ...
} while (/* Bedingung */);
Funktionsaufrufe
Nach dem Funktionsnamen wird direkt die öffnende Klammer notiert.
Die übergebenen Parameter werden mit Kommata getrennt, wobei zwischen Komma und nächstem Parameter ein Leerzeichen steht.
$var1 = foo(1, 2, 3);
$var2 = bar();
Sprachkonstrukte
Sprachkonstrukte, die keine Klammern erfordern, werden generell ohne diese geschrieben. Zu ihnen gehören u.a. require_once, include_once, echo und print:
require_once 'file.php';
include_once 'file.php';
print 'foo';
echo 'bar';
Klassen- und Funktions-/Methoden-Deklarationen
Die Klammersetzung bei Klassen- und Methoden-Deklarationen unterscheidet sich von der Klammersetzung der Kontrollstukturen. Hier wird die öffnende geschweifte Klammer immer in eine eigene Zeile gesetzt.
Klassennamen werden in PascalCases geschrieben, beginnen also mit einem Großbuchstaben. Jedes weitere Wort wird mit einem weiteren Großbuchstaben angehängt.
Funktions-/Methoden- und Eigenschaftsnamen werden hingegen in camelCases notiert. Sie beginnen also mit einem Kleinbuchstaben und jedes weitere Wort wird mit einem Großbuchstaben angehängt.
class MyAmazingClass
{
public function __construct()
{
// ...
}
} function myFunction()
{
// ...
}
PHP-Tags
Es müssen immer ausgeschriebene PHP-Tags (<?php ... ?>) benutzt werden. Short-Tags und ähnliche Grausamkeiten sind zu unterlassen.
Es wird dringend empfohlen, schließende ?> am Scriptende zu vermeiden, um dem üblichen headers already sent Fehler vorzubeugen.
Kommentare
Für einzeilige Kommentare ist das Kommentarzeichen // zu benutzen, für mehrzeilige das Kommentarzeichen /* ... */. Auf das Gatterzeichen (#) sollte verzichtet werden.
Nach dem einleitenden Kommentarzeichen folgt zunächst ein Leerzeichen. Bei mehrzeiligen Kommentaren stehen einleitendes und ausleitendes Kommentarzeichen in einer eigenen Zeile.
//falsch
// richtig
/*falsch*/
/* fast richtig */
/*
richtig
*/
/*
noch richtiger
*/ Kommentare werden nicht mit der Applikationslogik vermischt und stehen deshalb nicht mit einer PHP-Anweisung zusammen in einer Zeile.
$x = 5; // falsch
// richtig
$x = 5;
Empfehlung zu Stringbegrenzern
Im Allgemeinen empfehlen sich einfache Hochkommata als Stringbegrenzer. Sie erlauben die Ausgabe von Anführungszeichen (") ohne Escapezeichen, die vor allem für die Angabe von Attributen in HTML weit verbreitet sind.
Da in einfach gequoteten Strings keine Variablen geparst werden, ergibt sich eine Syntax, die Variablen via Konkatenation (.-Operator) mit dem Reststring verbindet. Vorteilhaft wirkt sich hier die bessere Darstellung im Syntaxhighlighting aus, was das Auftreten von Parserfehlern verringern kann:
// nur mit gutem Grund verwenden
echo "wrong: $wrong; some more: $more";
echo "<input type=\"text\" value=\"$value\">";
// besser ist
echo 'right: ' . $right . '; some more: ' . $more;
echo '<input type="text" value="' . $value . '">';
Assoziative Arrayschlüssel
Assoziative (also String-)Arrayschlüssel sind stets mit Stringbegrenzern zu versehen. Auch wenn PHP hier sehr gutwillig reagiert, sind Arrayschlüssel zumeist keine Konstanten und gehören damit als String ausgezeichnet.
$myArray = array();
/*
Funktional, aber falsch.
Wenn abc ein String ist, gehört es in Stringbegrenzer,
als Konstante großgeschrieben
Zudem: Würde einmal die Konstante abc definiert, ergäbe sich plötzlich
ein komplett neuer Arrayschlüssel
*/
$myArray[abc] = 'pseudo-konstante';
// richtig
$myArray[0] = 'numerisch';
$myArray['abc'] = 'assoziativ';