| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.autoloading.design">
- <title>Ziele und Design</title>
- <sect2 id="learning.autoloading.design.naming">
- <title>Konventionen für Klassennamen</title>
- <para>
- Um das Autoloaden im Zend Framework zu verstehen, muss man zuerst die Abhängigkeit
- zwischen Klassennamen und Klassendateien verstehen.
- </para>
- <para>
- Zend Framework hat sich eine Idee von <ulink url="http://pear.php.net/">PEAR</ulink>
- geborgt wobei Klassennamen eine 1:1 Beziehung zum Dateisystem haben. Einfach gesagt,
- der Unterstrich ("_") wird durch einen Verzeichnis Separator ersetzt um den Pfad zur
- Datei aufzulösen, und anschließend wird der Suffix "<filename>.php</filename>"
- hinzugefügt. Zum Beispiel würde die Klasse "<classname>Foo_Bar_Baz</classname>" mit
- "<filename>Foo/Bar/Baz.php</filename>" auf dem Dateisystem korrespondieren. Die Annahme
- ist auch, das die Klassen über <acronym>PHP</acronym>'s
- <property>include_path</property> Einstellung aufgelöst werden kann, welche es sowohl
- <methodname>include()</methodname> als auch <methodname>require()</methodname> erlaubt
- den Dateinamen über einen relativen Pfad Lookup im
- <property>include_path</property> zu finden.
- </para>
- <para>
- Zusätzlich, bei <acronym>PEAR</acronym> wie auch im <ulink
- url="http://php.net/userlandnaming.tips">PHP Projekt</ulink>, verwenden und
- empfehlen wir die Verwendung eines Hersteller oder Projekt Präfixes für den eigenen
- Code. Was das bedeutet ist, dass alle Klassen die man schreibt den gleichen gemeinsamen
- Klassenpräfix teilen; zum Beispiel hat jeder Code im Zend Framework den Präfix "Zend_".
- Diese Namenskonvention hilft Namenskollisionen zu verhindern. Im Zend Framework
- referieren wir hierzu oft als "Namespace" Präfix; man sollte darauf achten das man dies
- nicht mit <acronym>PHP</acronym>'s nativer Namespace Implementation verwechselt.
- </para>
- <para>
- Zend Framework folgt diesen einfachen Regeln intern, und unser Coding Standard empfiehlt
- dass man dies in jedem Bibliotheks Code macht.
- </para>
- </sect2>
- <sect2 id="learning.autoloading.design.autoloader">
- <title>Autoloader Konventionen und Design</title>
- <para>
- Zend Framework's unterstützung für das Autoloaden, welche primär über
- <classname>Zend_Loader_Autoloader</classname> angeboten wird, hat die folgenden Ziele
- und Design Elemente:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>Namespace Abgleich anbieten</emphasis>: Wenn der Namespace Präfix der
- Klasse nicht in der Liste der registrierten Namespaces ist, wird sofort
- <constant>FALSE</constant> zurückgegeben. Das erlaubt es einen optimistischeren
- Abgleich anzubieten, sowie als Fallback für andere Autoloader zu fungieren.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Erlaubt dem Autoloader als Fallback Autoloader zu arbeiten</emphasis>:
- Im Falle das ein Team sehr weit verbreitet ist, oder ein unbekanntes Set von
- Namespace Präfixes verwendet, sollte der Autoloader trotzdem konfigurierbar sein
- damit er versucht jedem Namespace Präfix zu entsprechen. Es sollte trotzdem
- erwähnt werden das diese Praxis nicht empfohlen wird, da Sie auch zu unnötigen
- Lookups führt.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Erlaubt es Fehlerunterdrückung zu wechseln</emphasis>: Wir denken --
- und die größere <acronym>PHP</acronym> Community tut das auch -- dass die
- Fehlerunterdrückung eine schlechte Idee ist. Sie ist teuer, und maskiert die
- rechten Probleme der Anwendung. Deswegen sollte sie standardmäßig ausgeschaltet
- sein. Trotzdem, wenn ein Entwickler darauf <emphasis>besteht</emphasis> das Sie
- eingeschaltet wenn soll, erlauben wir es Sie einzuschalten.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Erlaubt spezielle eigene Callbacks für Autoloading</emphasis>:
- Einige Entwickler wollen <methodname>Zend_Loader::loadClass()</methodname> für
- das Autoloaden nicht, aber trotzdem Zend Framework's Mechanismus hierfür
- verwenden. <classname>Zend_Loader_Autoloader</classname> erlaubt es einen
- alternativen Callback für das Autoloaden zu spezifizieren.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>Erlaubt die Manipulation der Autload Callback Kette von
- <acronym>SPL</acronym></emphasis>: Der Zweck hiervon ist es die Spezifikation
- von zusätzlichen Autoloadern zu verwenden -- zum Beispiel müssen Ressource Lader
- für Klassen keine 1:1 Entsprechung zum Dateisystem haben -- und Sie vor oder
- nach dem primären Zend Framework Autoloader zu registrieren.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
|