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'";

                    
Diese Syntax ist zu bevorzugen, im Gegensatz zum Ausbruch von Apostrophs, da Sie viel einfacher lesbar ist.

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.

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. 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;
}

                    
PHP erlaubt das Anweisungen in einigen Fällen auch ohne Klammern zu schreiben. Dieser Coding Standard macht keine Unterscheidungen und es müssen alle "if", "elseif" oder "else" Anweisungen in Klammern geschrieben werden.

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
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual