Programmer's Reference Guide
| PHP Dateiformatierung |
Namens Konventionen
Klassen
Zend Framework standartisiert eine Klassennamen Konvention wobei die Namen der Klassen direkt mit den Verzeichnissen übereinstimmen muß in welchen Sie gespeichert sind. Das Basisverzeichnis der Zend Framework Standard Bibliothek ist das "Zend/" Verzeichnis, wobei das Basisverzeichnis der Zend Framework Extras Bibliothek im "ZendX/" Verzeichnis ist. Alle Zend Framework Klassen werden hierarchisch unter dem gleichen Basisverzeichnis gespeichert.
Klassennamen dürfen nur alphanumerische Zeichen enthalten. Nummern sind in Klassennamen gestattet es wird aber von Ihnen in den meisten Fällen abgeraten. Unterstriche sind nur gestattet im Platz des Pfadseparators -- der Dateiname "Zend/Db/Table.php" muß übereinstimmen mit dem Klassennamen "Zend_Db_Table".
Wenn ein Klassenname aus mehr als einem Wort besteht, muß der erste Buchstabe von jedem neuen Wort großgeschrieben werden. Durchgehende Großbuchstaben sind nicht erlaubt, z.B. eine Klasse "Zend_PDF" ist nicht erlaubt, aber "Zend_Pdf" ist akzeptierbar.
Diese Konventionen definieren einen Pseudo-Namespace Mechanismus für Zend Framework. Zend Framework wird das PHP Namespace Feature einbauen sobald es verfügbar ist und es für unsere Entwickler in deren Anwendungen ohne Bedenken verwendbar ist.
Siehe die Klassennamen in der Standard und Extra Bibliothek für Beispiel dieser Klassennamen Konvention.
Hinweis: Wichtig: Code welcher mit dem Framework ausgeliefert werden muß, aber nicht Teil der Standard oder Extras Bibliothek ist (z.B. Anwendungscode oder Bibliotheken die nicht von Zend ausgeliefert werden), dürfen nie mit "Zend_" oder "ZendX_" beginnen.
Abstrakte Klassen
Generell folgen abstrakte Klassen der gleichen Konvention wie Klassen, mit einer zusätzlichen Regel: Die Namen von abstrakten Klassen müssen mit derm Term "Abstract" enden, und dem Term darf kein Unterstrich vorangestellt sein. Als Beispiel wird Zend_Controller_Plugin_Abstract als ungültig angenommen, aber Zend_Controller_PluginAbstract oder Zend_Controller_Plugin_PluginAbstract wären gültige Namen.
Hinweis: Diese Namens Konvention ist neu mit Version 1.9.0 des Zend Frameworks. Bei Klassen vor dieser Version kann es sein das sie dieser Regel nicht folgen, aber Sie werden in Zukunft umbenannt um zu entsprechen.
Der Hintergrund dieser Änderung ist die Verwendung von Namespaces. Da wir auf Zend Framework 2.0 und die Verwendung von PHP 5.3 zugehen, werden wir Namespaces verwenden. Der einfachste Weg die Konvertierung zu Namespaces zu automatisieren besteht darin die Unterstriche in Namespace Separatoren zu konvertieren -- aber in der alten Namenskonvention, lässt dies den Klassennamen einfach als "Abstract" oder "Interface" zurück" -- beide sind reservierte Schlüsselwörter in PHP. Wenn wir den Namen der (Unter)Komponente dem Klassennamen voranstellen können wir diese Probleme vermeiden.
Um die Situation zu illustrieren, nehmen wir an dass die Klasse Zend_Controller_Request_Abstract konvertiert wird um Namespaces zu verwenden:
Natürlich wird das nicht funktionieren. In der neuen Namenskonvention würde dies aber trotzdem zu folgendem werden:
namespace Zend\Controller\Request; abstract class Abstract { // ... }
Wir bleiben trotzdem bei der Semantik und der Trennung auf Namespaces, wärend wir die Probleme mit den Schlüsselworten vermeiden; simultan beschreibt dies abstrakte Klassen besser.
namespace Zend\Controller\Request; abstract class RequestAbstract { // ... }
Interfaces
Generell folgen Interfaces der gleichen Konvention wie Klassen, mit einer zusätzlichen Regel: Die Namen von Interfaces können optional mit dem Term "Interface" enden, aber dem Term darf kein Unterstrich vorangestellt sein. Als Beispiel wird Zend_Controller_Plugin_Interface als ungültig angenommen, aber Zend_Controller_PluginInterface oder Zend_Controller_Plugin_PluginInterface wären gültige Namen.
Wärend diese Regel nicht benötigt wird, wird Sie stark empfohlen, da Sie Entwicklern einen guten visuellen Hinweis gibt welche Dateien ein Interface enthalten und welche Klassen.
Hinweis: Diese Namens Konvention ist neu mit Version 1.9.0 des Zend Frameworks. Bei Klassen vor dieser Version kann es sein das sie dieser Regel nicht folgen, aber Sie werden in Zukunft umbenannt um zu entsprechen. Siehe den vorhergehenden Abschnitt für weitere Informationen über die Hintergründe für diese Änderung.
Dateinamen
Für alle anderen Dateien sind nur alphanummerische Zeichen, Unterstriche, und der Bindestrich ("-") gestattet. Leerzeichen sind völlig verboten.
Jede Datei die irgendeinen PHP Code enthält sollte mit der Endung ".php" enden, mit Ausnahme der View Skripte. Die folgenden Beispiele zeigen akzeptierbare Dateinamen für Zend Framework Klassen:
- Zend/Db.php
- Zend/Controller/Front.php
- Zend/View/Helper/FormRadio.php
Dateinamen müssen den Klassennamen wie oben beschrieben entsprechen.
Funktionen und Methoden
Funktionsnamen dürfen nur Alphanummerische Zeichen enthalten. Unterstriche sind nicht gestattet. Nummern sind in Funktionsnamen gestattet aber in den meisten Fällen nicht empfohlen.
Funktionsnamen müssen immer mit einem Kleinbuchstaben anfangen. Wenn Funktionsnamen aus mehr als einem Wort bestehen, muß der erste Buchstabe jeden Wortes großgeschrieben werden. Das wird normalerweise "camelCase" Formatierung genannt.
Wortreichtum wird generell befürwortet. Funktionsnamen sollten so wortreich wie möglich sein um deren Zweck und Verhalten zu erklären.
Das sind Beispiele akzeptierbarer Namen für Funktionen:
- filterInput()
- getElementById()
- widgetFactory()
Für objekt-orientiertes Programmieren, sollten Zugriffspunkte für Instanzen oder statische Variablen immer mit "get" oder "set" beginnen. Wenn Design-Pattern implementiert werden, wie Singleton oder das Factory Pattern, sollte der Name der Methode den Namen des Pattern enthalten wo es praktikabel ist, um das Verhalten besser zu beschreiben.
Für Methoden in Objekten die mit dem "private" oder "protected" Modifikator deklariert sind, muß das erste Zeichen des Namens der Methode ein einzelner Unterstrich sein. Das ist die einzige akzeptable Anwendung von einem Unterstrich im Namen einer Methode. Methoden die als "public" deklariert sind sollten nie einem Unterstrich enthalten.
Funktionen im globalen Bereich (auch "floating functions" genannt) sind gestattet aber es wird von Ihnen in den meisten Fällen abgeraten. Diese Funktionen sollten in einer statischen Klasse gewrappt werden.
Variablen
Variablennamen dürfen nur Alphanummerische Zeichen enthalten. Unterstriche sind nicht gestattet. Nummern sind in Variablen gestattet in den meisten Fällen aber nicht empfohlen.
Für Instanzvariablen die mit dem "private" oder "protected" Modifikator deklariert werden, muß das erste Zeichen des Funktionsnamens ein einzelner Unterstrich sein. Das ist die einzige akzeptierte Anwendung eines Unterstriches in einem variablen Namen. Klassenvariablen welche als "public" deklariert werden sollten nie mit einem Unterstrich beginnen.
Wie bei Funktionsnamen (siehe Abschnitt 3.3) müssen Variablennamen immer mit einem Kleinbuchstaben starten und der "camelCaps" Schreibweise folgen.
Wortreichtum wird generell befürwortet. Variablen sollen immer so wortreich wie möglich sein um die Daten zu beschreiben die der Entwickler in Ihnen zu speichern gedenkt. Von gedrängte Variablennamen wie "$i" und "$n" wird abgeraten für alles außer die kleinsten Schleifen. Wenn eine Schleife mehr als 20 Codezeilen enthält sollten die Index-Variablen einen ausführlicheren Namen haben.
Konstanten
Konstanten können beides enthalten, sowohl Alphanummerische Zeichen als auch Unterstriche. Nummern sind in Konstantennamen gestattet.
Alle Buchstaben die in Konstantenname verwendet werden müssen großgeschrieben haben, wärend Wörter in einem Konstantennamen durch Unterstriche getrennt werden müssen.
Zum Beispiel ist EMBED_SUPPRESS_EMBED_EXCEPTION gestattet aber EMBED_SUPPRESSEMBEDEXCEPTION nicht.
Konstanten müssen als Klassenkonstanten definiert werden mit dem "const" Modifikator. Die Definition von Konstanten im globalen Bereich mit der "define" Funktion ist gestattet aber es wird es wird stärkstens davon abgeraten.
| PHP Dateiformatierung |
Add A Comment
Please do not report issues via comments; use the ZF Issue Tracker.
If you have a JIRA/Crowd account, we suggest you login first before commenting.

Comments
"In general, abstract classes follow the same conventions as classes, with one additional rule: abstract class names must end in the term, "Abstract", and that term must not be preceded by an underscore. As an example, Zend_Controller_Plugin_Abstract is considered an invalid name, but Zend_Controller_PluginAbstract or Zend_Controller_Plugin_PluginAbstract would be valid names."
In the new Package Zend_cloud and Zend_Http from version 1.11.5 name of abstract classes are like this:
Zend_Http_UserAgent_AbstractDevice
Should it be Zend_Http_UserAgent_DeviceAbstract instead ?
Or am i wrong ?
Thanks for your answer.
public static function _unsetInstance()
{
self::$_registry = null;
}
In ZF2 has been almost everything has been converted to Abstract as first term.
The case
Zend_Controller_Plugin_AbstractPluginis usefull if you plan to have a folder for your concrete implementations, for example Plugins.The case
Zend_Controller_AbstractPluginseems only usefull in places where you implement the concrete classes otherwise. Wich for Plugins, it is not.I couldn't find ZF2 conventions yet, but i'll continue searching the tracker and report that to be fixed here.