Programmer's Reference Guide
| Namens Konventionen |
Code Stil
PHP Code Abgrenzung
PHP Code muß immer mit der kompletten Form des Standard-PHP Tags abgegrenzt sein:
<?php
?>
Kurze Tags sind nie erlaubt.
Strings
String Literale
Wenn ein String ein Literal ist (er also keine Variablenvertreter enthält), sollte immer das Apostroph oder "einzelne Anführungszeichen" verwendet werden um den String abzugrenzen:
$a = 'Beispiel String';
String Literale die Apostrophe enthalten
Wenn ein literaler String selbst Apostrophe enthält, ist es gestattet den String mit Anführungszeichen oder "doppeltes Anführungszeichen" abzugrenzen. Das ist speziell für SQL Anweisungen nützlich:
$sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
Variabler Austausch
Variabler Austausch ist gestatten bei Verwendung einer der Formen:
$greeting = "Halle $name, willkommen zurück!";
$greeting = "Hallo {$name}, willkommen zurück!";
Aus Gründen der Konstistenz ist folgende Form nicht gestattet:
$greeting = "Hallo ${name}, willkommen zurück!";
Verbinden von Strings
Strings müssen verbunden werden indem man den "." Operator verwendet. Ein Leerzeichen muß immer vor und nach dem "." Operator hinzugefügt werden um die Lesbarkeit zu erhöhen:
$company = 'Zend' . ' ' . 'Technologies';
Wenn Strings mit dem "." Operator verbunden werden, ist es empfohlen die Anweisung in mehrere Zeilen umzubrechen um die Lesbarkeit zu erhöhen. In diesen Fällen sollte jede folgende Zeile mit Leerraum aufgefüllt werden so das der "." Operator genau unterhalb des "=" Operators ist:
$sql = "SELECT `id`, `name` FROM `people` "
. "WHERE `name` = 'Susan' "
. "ORDER BY `name` ASC ";
Arrays
Nummerisch indizierte Arrays
Negative Nummern sind in Indezes nicht gestattet.
Ein indiziertes Array kann mit mit irgendeiner nicht-negativen Nummer beginnen, trotzdem sind alle BasisIndex neben 0 nicht erlaubt.
Wenn indizierte Arrays mit dem array Funktion deklariert werden, muß ein
folgendes Leerzeichen nach jeder Kommabegrenzung hinzugefügt werden um die Lesbarkeit
zu erhöhen:
$sampleArray = array(1, 2, 3, 'Zend', 'Studio');
Es ist gestattet mehrzeilige indizierte Arrays zu definieren bei Verwendung des "array" Konstrukts. In diesem Fall, muß jede folgende Zeile mit Leerzeichen aufgefüllt werden so das der Beginn jeder Zeile ausgerichtet ist:
$sampleArray = array(1, 2, 3, 'Zend', 'Studio',
$a, $b, $c,
56.44, $d, 500);
Assoziative Arrays
Wenn assoziative Arrays mit dem array Konstrukt deklariert werden, ist das
Umbrechen der Anweisung in mehrere Zeilen gestattet. In diesem Fall muß jede folgende
Linie mit Leerraum aufgefüllt werden so das beide, der Schlüssel und der Wert untereinander
stehen:
$sampleArray = array('firstKey' => 'firstValue',
'secondKey' => 'secondValue');
Klassen
Klassen Deklarationen
Klassen müssen entsprechend der Zend Framework Namenskonvention benannt werden.
Die Klammer sollte immer in der Zeile unter dem Klassennamen geschrieben werden (die "one true brace" Form).
Jede Klasse muß einen Dokumentationsblock haben der dem PHPDocumentor Standard entspricht.
Jeder Code in der Klasse muß mit vier Leerzeichen eingerückt sein.
Nur eine Klasse ist in jeder PHP Datei gestattet.
Das Platzieren von zusätzlichem Code in Klassendateien ist gestattet aber es wird davon abgeraten. In solchen Dateien müssen zwei leere Zeilen die Klasse von jedem zusätzlichen PHP Code in der Datei seperieren.
Das folgende ist ein Beispiel einer akzeptierbaren Klassendeklaration:
/**
* Dokumentations Block hier
*/
class SampleClass
{
// gesamter Inhalt der Klasse
// muss mit vier Leerzeichen eingerückt sein
}
Klassenvariablen
Klassenvariablen müssen entsprechend den Variablen-Benennungs-Konventionen des Zend Frameworks benannt werden.
Jede Variable die in der Klasse deklariert wird muß am Beginn der Klasse ausgelistet werden, vor der Deklaration von allen Methoden.
Das var Konstrukt ist nicht gestattet. Klassenvariablen definieren Ihre
Sichtbarkeit durch die Verwendung des private, protected,
oder public Modifikatoren. Das gestatten von direktem Zugriff auf
Klassenvariablen durch deren Deklaration als public ist gestattet aber es wird davon
abgeraten da hierfür Zugriffsmethoden verwendet werden sollten (set/get).
Funktionen und Methoden
Deklaration von Funktionen und Methoden
Funktionen müssen nach der Funktions-Namenskonvention des Zend Frameworks benannt werden.
Methoden innerhalb von Klassen müssen immer Ihre Sichtbarkeit durch Verwendung einer der
private, protected, oder public Modifikatoren
definieren.
Wie bei Klassen, sollte die Klammer immer in der Zeile unterhalb des Funktionsnamens geschrieben werden (die "one true brace" Form). Leerzeichen zwischen dem Funktionsnamen und der öffnenden Klammer für die Argumente sind nicht erlaubt.
Von Funktionen im globalen Raum wird komplett abgeraten.
Das folgende ist ein Beispiel einer akzeptierbaren Funktionsdeklaration in einer Klasse:
/**
* Dokumentations Block hier
*/
class Foo
{
/**
* Dokumentations Block hier
*/
public function bar()
{
// gesamter Inhalt der Funktion
// muss durch view Leerzeichen eingerückt sein
}
}
NOTIZ: Die Übergabe per Referenz ist die einzige erlaubt Mechanismus für die Übergabe von Parametern in der Deklaration einer Funktion:
/**
* Dokumentations Block hier
*/
class Foo
{
/**
* Dokumentations Block hier
*/
public function bar(&$baz)
{}
}
Der Aufruf durch Referenz ist nicht gestattet.
Der Rückgabewert darf nicht in Klammern stehen. Das kann die Lesbarkeit behindern und zusätzlich den Code unterbrechen wenn eine Methode später später auf Rückgabe durch Referenz geändert wird.
/**
* Dokumentations Block hier
*/
class Foo
{
/**
* FALSCH
*/
public function bar()
{
return($this->bar);
}
/**
* RICHTIG
*/
public function bar()
{
return $this->bar;
}
}
Verwendung von Funktionen und Methoden
Funktionsargumente sollten durch ein einzelnes trennendes Leerzeichen nach dem Komma Trennzeichen getrennt werden. Das folgende ist ein Beispiel für einen akzeptierbaren Aufruf einer Funktion die drei Argumente benötigt:
threeArguments(1, 2, 3);
Übergabe von Referenzen zur Laufzeit ist strengstens verboten. Siehe die Sektion für Funktions Deklarationen für den richtigen Weg um Funktionsargumente per Referenz zu übergeben.
Durch die Übergabe von Arrays als Argument für eine Funktion, kann der Funktionsaufruf den "array" Hinweis enthalten und kann in mehrere Zeilen geteilt werden um die Lesbarkeit zu erhöhen. In solchen Fällen sind die normalen Richtlinien für das Schreiben von Arrays trotzdem noch anzuwenden:
threeArguments(array(1, 2, 3), 2, 3);
threeArguments(array(1, 2, 3, 'Zend', 'Studio',
$a, $b, $c,
56.44, $d, 500), 2, 3);
Kontrollanweisungen
If/Else/Elseif
Kontrollanweisungen die auf den if und elseif Konstrukten
beruhen müssen ein einzelnes Leerzeichen vor der öffnenden Klammer der bedingten Anweisung
und ein einzelnes Leerzeichen nach der schließenden Klammer.
Innerhalb der bedingten Anweisungen zwischen den Klammern, müssen die Operationen, für die Lesbarkeit, durch Leerzeichen getrennt werden. Innere Klammern sind zu befürworten um die logische Gruppierung für größeren bedingte Anweisungen zu erhöhen.
Die öffnende Klammer wird in der selben Zeile geschrieben wie die Bedingungsanweisung. Die schließende Klammer wird immer in einer eigenen Zeile geschrieben. Jeder Inhalt innerhalb der Klammer muß durch Verwendung von vier Leerzeichen eingerückt werden.
if ($a != 2) {
$a = 2;
}
Für "if" Anweisungen die "elseif" oder "else" beinhalten, sind die Konventionen der Formatierung ähnlich dem "if" Konstrukt. Das folgende Beispiel zeigt gültige Formatierungen für "if" Anweisungen mit "else" und/oder "elseif" Konstrukten:
if ($a != 2) {
$a = 2;
} else {
$a = 7;
}
if ($a != 2) {
$a = 2;
} elseif ($a == 3) {
$a = 4;
} else {
$a = 7;
}
Die Verwendung des "elseif" Konstruktes ist erlaubt es wird aber strengstens davon abgeraten und es ist die "else if" Kombination zu bevorzugen.
Switch
Kontrollanweisungen die mit der "switch" Anweisung geschrieben werden müssen ein einzelnes Leerzeichen vor der öffnenden Klammer der Bedingten Anweisung besitzen, und auch nach der schließenden Klammer.
Jeglicher Inhalt innerhalb der "switch" Anweisung muß durch Verwendung von vier Leerzeichen eingerückt sein. Der Inhalt unter jeder "case" Anweisung muß durch Verwendung von vier zusätzlichen Leerzeichen eingerückt werden.
switch ($numPeople) {
case 1:
break;
case 2:
break;
default:
break;
}
Das default Konstrukt darf nie bei der switch Anweisung vergessen
werden.
NOTIZ: Es ist machmal nützlich eine case Anweisung zu
schreiben, die durch das nächste case fällt indem innerhalb solcher Fälle kein
break oder return angegeben wird. Um diese Fälle von Fehlern
zu unterscheiden, sollte jede case Anweisung in der break
oder return unterlassen werden einen Kommentar enthalten der anzeigt das
das break gewünschtermaßen unterdrückt wurde.
Inline Dokumentation
Dokumentations Format
Alle Dokumentations Blöcke ("DocBlock") müssel mit dem phpDocumentor Format kompatibel sein. Die Beschreibung des phpDocumentor Formats is jenseits der Reichweite dieses Dokuments. Für weiterführende Informationen siehe: » http://phpdoc.org">
Alle Klassen Dateien müssen einen "file-level" Docblock am Beginn jeder Datei und einen "class-level" Docblock direkt überhalb jeder Klasse enthalten. Beispiele solcher Docblocks können anbei gefunden werden.
Dateien
Jede Datei die PHP Code enthält muß einen Docblock am Beginn der Datei besitzen welcher mindestens diese phpDocumentor Tags enthält:
/**
* Kurze Beschreibung der Datei
*
* Lange Beschreibung der Datei (wenn vorhanden)...
*
* LICENSE: Einige Lizenz Informationen
*
* @copyright 2008 Zend Technologies
* @license http://framework.zend.com/license BSD License
* @version $Id:$
* @link http://framework.zend.com/package/PackageName
* @since Datei vorhanden seit Release 1.2.0
*/
Klassen
Jede Klasse muß einen Docblock haben welche mindestens diese phpDocumentor Tags enthält:
/**
* Kurze Beschreibung für die Klasse
*
* Lange Beschreibung für die Klasse (wenn vorhanden)...
*
* @copyright 2008 Zend Technologies
* @license http://framework.zend.com/license BSD License
* @version Release: @package_version@
* @link http://framework.zend.com/package/PackageName
* @since Klasse vorhanden seit Release 1.5.0
* @deprecated Klasse abgeraten ab Release 2.0.0
*/
Funktionen
Jede Funktion, auch Objekt Methoden, müssen einen Docblock haben welcher mindestens folgendes enthält:
Eine Beschreibung der Funktion
Alle Argumente
Alle möglichen Rückgabewerte
Es ist nicht notwendig das "@access" Tag zu verwenden, weil das Accesslevel bereits vom "public", "private" oder "protected" Modifikator bekannt ist wenn die Funktion deklariert wird.
Wenn eine Funktion/Methode eine Ausnahme werfen könnte, muß @throws für alle bekannten Exception Klassen verwendet werden:
@throws exceptionclass [Beschreibung]
| Namens Konventionen |
