<?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>
