| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 16166 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.loader.autoloader">
- <title>Der Autoloader</title>
- <para>
- <classname>Zend_Loader_Autoloader</classname> ist eine vollständige Autoloader Lösung für
- den Zend Framework. Sie wurde entwickelt um verschiedene Ziele zu lösen:
- </para>
- <itemizedlist>
- <listitem><para>
- Einen echten Namespace Autoloader bieten. (Frühere Inkarnationen waren mit
- Namespaces auf Benutzerebene verknüpft)
- </para></listitem>
- <listitem><para>
- Es zu erlauben eigene Callbacks als Autoloader zu registrieren und diese als Stack
- zu managen. (Zu der als das geschrieben wirde gab es einige Probleme mit
- <code>spl_autoload</code>, welche es nicht erlaubten einen Callback erneut zu
- registrieren wenn dieser eine Instanzmethode verwendet.)
- </para></listitem>
- <listitem><para>
- Er zu erlauben Namespaces optimiert zu matchen um schnellere Auflösung der Klasse
- zu erlauben.
- </para></listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Loader_Autoloader</classname> implementiert ein Singleton, was es universell
- verwendbar macht. Das bietet die Möglichkeit zusätzlich Autoloader von überall im eigenen
- Code zu registrieren wo es notwendig ist.
- </para>
- <sect2 id="zend.loader.autoloader.usage">
- <title>Verwenden des Autoloaders</title>
- <para>
- Das erste Mal wenn eine Instanz des Autoloaders empfangen wird, registriert dieser sich
- mit <code>spl_autoload</code>. Man kann eine Instanz erhalten indem die
- <code>getInstance()</code> Methode verwendet wird:
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader = Zend_Loader_Autoloader::getInstance();
- ]]></programlisting>
- <para>
- Standardmäßig ist der Autloader so konfiguriert das er den "Zend_" und "ZendX_"
- Namespaces entspricht. Wenn man seinen eigenen Bibliothekscode hat der seinen eigenen
- Namespace verwendet, kann man Ihn mit dem Autoloader registrieren indem die
- <code>registerNamespace()</code> Methode verwendet. Wenn der eigene Blbliothekscode
- ein Präfix von "My_" hat, könnte man auch folgendes tun:
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->registerNamespace('My_');
- ]]></programlisting>
- <note>
- <title>Namespace Präfixe</title>
- <para>
- Man sollte beachten das das vorhergehende Beispiel "My_" verwendet und nicht "My".
- Der Grund ist, das <classname>Zend_Loader_Autoloader</classname> als Autoloader für
- generelle Anwendungsfälle gedacht ist, und deshalb nicht die Annahme macht das ein
- angegebener Präfix eines Klassen Namespaces einen Unterstrich enthalten muß. Wenn
- der eigene Klassennamespace einen <emphasis>enhält</emphasis>, dann sollte man Ihn
- mit dem eigenen Namespace registrieren.
- </para>
- </note>
- <para>
- Man kann auch einen eigene Autoloader Callbacks registrieren, optional mit einem
- spezifischen Namespace (oder einer Gruppe von Namespaces).
- <classname>Zend_Loader_Autoloader</classname> versucht zuerst die passenden zu finden
- bevor sein interner Autoloading Mechanismus verwendet wird.
- </para>
- <para>
- Man könnte, als Beispiel, ein oder mehrere eZcomponents Komponenten mit der eigenen
- Zend Framework Anwendung verwenden wollen. Um deren Autoloading Möglichkeiten zu
- verwenden, müssen diese auf den Autoloader Stack gepusht werden indem man
- <code>pushAutoloader()</code> verwendet:
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->pushAutoloader(array('ezcBase', 'autoload'), 'ezc');
- ]]></programlisting>
- <para>
- Das zeigt dem Autoloader das der eZcomponents Autoloader für Klassen zu verwenden ist
- die mit "ezc" anfangen.
- </para>
- <para>
- Man kann die <code>unshiftAutoloader()</code> Methode verwenden um den Autoloader
- an den Anfang der Autoloader Kette hinzu zu fügen.
- </para>
- <para>
- Standmäßig, macht <classname>Zend_Loader_Autoloader</classname> keine
- Fehlerunterdrückung wenn sein interner Autoloader verwendet wird, der seinerseits
- <classname>Zend_Loader::loadClass()</classname> verwendet. Die meiste Zeit ist das genau
- das was man will. Trotzdem, gibt es Fälle in denen man Sie unterdrücken will.
- Man das mit Hilfe von <code>suppressNotFoundWarnings()</code> tun:
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->suppressNotFoundWarnings(true);
- ]]></programlisting>
- <para>
- Letztendlich kann es Zeiten geben in denen man will das der Autoloader irgendeinen
- Namespace verwendet. Zum Beispiel verwenden die PEAR Bibliotheken keinen gemeinsamen
- Namespace, was es schwierig macht individuelle Namespaces zu spezifizieren wenn viele
- PEAR Komponenten verwendet werden. Man kann die <code>setFallbackAutoloader()</code>
- Methode verwenden damit der Autoloader als catch-all arbeitet:
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->setFallbackAutoloader(true);
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.loader.autoloader.interface">
- <title>Das Autoloader Interface</title>
- <para>
- Neben der Möglichkeit eigene Callbacks als Autoloader zu spezifizieren, definiert
- Zend Framework auch ein Interface für Autoloading Klassen,
- <classname>Zend_Loader_Autoloader_Interface</classname>, das implementiert werden kann:
- </para>
- <programlisting language="php"><![CDATA[
- interface Zend_Loader_Autoloader_Interface
- {
- public function autoload($class);
- }
- ]]></programlisting>
- <para>
- Wenn das Interface verwendet wird, kann man einfach eine Klasseninstanz an
- <classname>Zend_Loader_Autoloader</classname>'s <code>pushAutoloader()</code> und
- <code>unshiftAutoloader()</code> Methoden übergeben:
- </para>
- <programlisting language="php"><![CDATA[
- // Angenommen Foo_Autoloader implementiert Zend_Loader_Autoloader_Interface:
- $foo = new Foo_Autoloader();
- $autoloader->pushAutoloader($foo, 'Foo_');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.loader.autoloader.reference">
- <title>Autoloader Referenz</title>
- <para>
- Anbei kann ein Wegweiser für die Methoden gefunden werden die in
- <classname>Zend_Loader_Autoloader</classname> vorhanden sind.
- </para>
- <table id="zend.loader.autoloader.reference.api">
- <title>Zend_Loader_Autoloader Methoden</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Methode</entry>
- <entry>Rückgabewert</entry>
- <entry>Parameter</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>getInstance()</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry>N/A</entry>
- <entry><para>
- empfängt die Singleton Instanz von
- <classname>Zend_Loader_Autoloader</classname>. Beim ersten Empfang
- registriert sich diese selbst bei <code>spl_autoload</code>. Diese
- Methode ist statisch.
- </para></entry>
- </row>
- <row>
- <entry><code>resetInstance()</code></entry>
- <entry><code>void</code></entry>
- <entry>N/A</entry>
- <entry><para>
- Resetiert den Status der Singleton Instanz von
- <classname>Zend_Loader_Autoloader</classname> zu dem originalen Status,
- de-registriert alle Autoloader Callbacks und alle registrierten
- Namespaces.
- </para></entry>
- </row>
- <row>
- <entry><code>autoload($class)</code></entry>
- <entry><code>string|false</code></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$class</code>, <emphasis>Benötigt</emphasis>.
- Der String eines Klassennamens der geladen werden soll.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Versucht einen Klassennamen zu einer Datei aufzulösen und diese zu
- laden.
- </para></entry>
- </row>
- <row>
- <entry><code>setDefaultAutoloader($callback)</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$callback</code>, <emphasis>Benötigt</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Spezifiziert einen alternativen PHP Callback der für die standardmäßige
- Autoloader Implementation verwendet werden soll.
- </para></entry>
- </row>
- <row>
- <entry><code>getDefaultAutoloader()</code></entry>
- <entry><code>callback</code></entry>
- <entry>N/A</entry>
- <entry><para>
- Empfängt die standardmäßige Autoloader Implementation; standardmäßig
- ist das <classname>Zend_Loader::loadClass()</classname>.
- </para></entry>
- </row>
- <row>
- <entry><code>setAutoloaders(array $autoloaders)</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$autoloaders</code>, <emphasis>Benötigt</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Setzt eine Liste von konkreten Autoloadern für deren Verwendung in den
- Autoloader Stack. Jedes Element im Autoloader Array muß ein PHP
- Callback sein.
- </para></entry>
- </row>
- <row>
- <entry><code>getAutoloaders()</code></entry>
- <entry><type>Array</type></entry>
- <entry>N/A</entry>
- <entry><para>
- Empfängt den internen Autoloader Stack.
- </para></entry>
- </row>
- <row>
- <entry><code>getNamespaceAutoloaders($namespace)</code></entry>
- <entry><type>Array</type></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$namespace</code>, <emphasis>Benötigt</emphasis>
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Holt alle Autoloader die registriert wurden um mit einem spezifischen
- Namespace geladen zu werden.
- </para></entry>
- </row>
- <row>
- <entry><code>registerNamespace($namespace)</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$namespace</code>, <emphasis>Benötigt</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Registriert ein oder mehrere Namespaces mit dem standardmäßigen
- Autoloader. Wenn <code>$namespace</code> ein String ist, registriert
- er diesen Namespace; wenn er ein Array von Strings ist, registriert er
- jeden als Namespace.
- </para></entry>
- </row>
- <row>
- <entry><code>unregisterNamespace($namespace)</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$namespace</code>, <emphasis>Benötigt</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- De-Registriert ein oder mehrere Namespaces vom standardmäßigen
- Autoloader. Wenn <code>$namespace</code> ein String ist, de-registriert
- er diesen Namespace; wenn er ein Array von Strings ist, de-registriert
- er jeden davon als Namespace.
- </para></entry>
- </row>
- <row>
- <entry><code>getRegisteredNamespace()</code></entry>
- <entry><type>Array</type></entry>
- <entry>N/A</entry>
- <entry><para>
- Gibt ein Array aller Namespaces zurück die mit dem standardmäßigen
- Autoloader registriert sind.
- </para></entry>
- </row>
- <row>
- <entry><code>suppressNotFoundWarnings($flag = null)</code></entry>
- <entry><code>boolean|Zend_Loader_Autoloader</code></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$flag</code>, <emphasis>Optional</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Setzt oder Empfängt den Wert des Flags das verwendet wird um anzuzeigen
- ob die standardmäßige Autoloader Implementation "file not found"
- Warnungen unterdrücken soll oder nicht. Wenn keine Argumente oder ein
- null Wert übergeben wird, wird ein Boolscher Wert zurückgegeben der den
- Status des Flags anzeigt; wenn ein Boolean übergeben wurde, wird das
- Flag auf den Wert gesetzt und die Autoloader Instanz wird zurückgegeben
- (um die Verkettung von Methoden zu erlauben).
- </para></entry>
- </row>
- <row>
- <entry><code>setFallbackAutoloader($flag)</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$flag</code>, <emphasis>Benötigt</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Setzt den Wert des Flags das verwendet wird um anzuzeigen ob der
- standardmäßige Autoloader als Fallback, oder Catch-All Autoloader
- für alle Namespaces verwendet werden soll.
- </para></entry>
- </row>
- <row>
- <entry><code>isFallbackAutoloader()</code></entry>
- <entry><type>Boolean</type></entry>
- <entry>N/A</entry>
- <entry><para>
- Empfängt den Wert des Flags das verwendet wird um anzuzeigen ob der
- standardmäßige Autoloader als Fallback, oder Catch-All Autoloader
- für alle Namespaces verwendet wird. Standardmäßig ist er false.
- </para></entry>
- </row>
- <row>
- <entry><code>getClassAutoloaders($class)</code></entry>
- <entry><type>Array</type></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$class</code>, <emphasis>Benötigt</emphasis>.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Gibt eine Liste von Namespaced Autoloadern zurück die der angegebenen
- Klasse potentiell entsprechen. Wenn keine passt, werden alle globalen
- (nicht ge-namespaceten Autoloader) zurückgegeben.
- </para></entry>
- </row>
- <row>
- <entry><code>unshiftAutoloader($callback, $namespace = '')</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$callback</code>, <emphasis>Benötigt</emphasis>.
- Ein gültiger PHP Callback.
- </para></listitem>
- <listitem><para>
- <code>$namespace</code>, <emphasis>Optional</emphasis>.
- Ein String der einen Klassenpräfix Namespace repräsentiert.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Fügt eine konkrete Autoloader Implementation an den Anfang des
- Autoloader Stacks hinzu. Wenn ein Namespace angegeben wird, wird dieser
- Namespace verwendet um optimistischerweise zu passen; andernfalls wird
- angenommen das der Autoloader ein globaler Autoloader ist.
- </para></entry>
- </row>
- <row>
- <entry><code>pushAutoloader($callback, $namespace = '')</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$callback</code>, <emphasis>Benötigt</emphasis>.
- Ein gültiger PHP Callback
- </para></listitem>
- <listitem><para>
- <code>$namespace</code>, <emphasis>Optional</emphasis>.
- Ein String der einen Klassenpräfix Namespace repräsentiert.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Fügt eine konkrete Autoloader Implementation an das Ende des internen
- Autoloader Stacks hinzu. Wenn ein Namespace angegeben wird, wird dieser
- Namespace verwendet um optimistischerweise zu passen; andernfalls wird
- angenommen das der Autoloader ein globaler Autoloader ist.
- </para></entry>
- </row>
- <row>
- <entry><code>removeAutoloader($callback, $namespace = '')</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry><itemizedlist>
- <listitem><para>
- <code>$callback</code>, <emphasis>Benötigt</emphasis>.
- Ein gültiger PHP Callback
- </para></listitem>
- <listitem><para>
- <code>$namespace</code>, <emphasis>Optional</emphasis>.
- Ein String der einen Klassenpräfix Namespace repräsentiert oder ein
- Array von Namespace Strings.
- </para></listitem>
- </itemizedlist></entry>
- <entry><para>
- Entfernt eine konkrete Autoloader Implementation vom internen Autoloader
- Stack. Wenn ein Namespace oder mehrere Namespaces angegeben werden, wird
- der Callback nur vom angegebenen Namespace oder den angegebenen
- Namespaces entfernt.
- </para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- </sect1>
|