<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.autoloading.design">
    <title>Architecture et buts</title>

    <sect2 id="learning.autoloading.design.naming">
        <title>Convention de noms des classes</title>

        <para>
            Pour comprendre l'autochargement dans le Zend Framework, vous devez d'abord comprendre
            la relation entre nom de classe et nom de fichier.
        </para>

        <para>
            Zend Framework a emprunté une idée de <ulink url="http://pear.php.net/">PEAR</ulink>,
            dans lequel les noms des classes ont une relation 1:1 avec le système de fichiers.
            Simplement, le caractère underscore ("_") est remplacé par un séparateur de dossier
            pour résoudre le chemin vers le fichier, puis le suffixe "<filename>.php</filename>"
            est ajouté. Par exemple, une classe "<classname>Foo_Bar_Baz</classname>" va
            correspondre à "<filename>Foo/Bar/Baz.php</filename>" sur le système de fichiers.
            La supposition est alors que <acronym>PHP</acronym> résoudra les fichier relativement
            à l'<property>include_path</property> ce qui permet d'utiliser
            <methodname>include()</methodname> et <methodname>require()</methodname> pour chercher
            le fichier relativement à l'<property>include_path</property>.
        </para>

        <para>
            Aussi, conformément à <acronym>PEAR</acronym> et au <ulink
                url="http://php.net/userlandnaming.tips">PHP project</ulink>, nous utilisons et
            vous recommandons d'utiliser un préfixe à votre code. Cela signifie que toutes les
            classes que vous écrivez doivent partager un préfixe unique, par exemple, dans
            Zend Framework le préfixe est "Zend_". Cette convention de noms évite toute collision
            dans les noms des classes. Dans Zend Framework, nous utilisons la notion "d'espace de
            noms" ("namespace"); attention à éviter la confusion avec l'implémentation native
            des espaces de noms de <acronym>PHP</acronym>.
        </para>

        <para>
            Zend Framework suit ces règles simples en interne et nos standards de code
            vous encouragent à faire de même avec le code de vos propres librairies.
        </para>
    </sect2>

    <sect2 id="learning.autoloading.design.autoloader">
        <title>Conventions et architecture d'Autoload</title>

        <para>
            Le support de l'autochargement (autoload) de Zend Framework, implémenté grâce à
            <classname>Zend_Loader_Autoloader</classname>, possède l'architecture et les
            buts suivants:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Correspondance d'espace de noms</emphasis>. Si l'espace de noms
                    de la classe (son préfixe) n'est pas dans une liste pré-enregistrée, retourner
                    <constant>FALSE</constant> immédiatement. Ceci permet une optimisation de la
                    recherche ainsi que l'utilisation d'autres autoloaders ou d'un autoloader
                    global par défaut.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Permettre un auto-chargement "de secours"</emphasis>.
                    Dans le cas où l'on ne peut lister ou prédéterminer les préfixes de manière
                    claire et sûre, l'autoloader doit pouvoir être configuré pour charger n'importe
                    quel espace de noms de classes. Notez que ce cas n'est pas recommandé car il
                    fait intervenir des algorithmes complexes et non optimisés.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Permettre la non-suppression des erreurs</emphasis>. Nous pensons
                     -- et la plus grande partie de la communauté <acronym>PHP</acronym> aussi --
                    que la suppression des erreurs est une mauvaise idée. C'est couteux en
                    ressources et cela masque les problèmes réels de l'application. Ainsi, par
                    défaut, la suppression des erreurs devrait être désactivée. Cependant, si
                    un développeur <emphasis>insiste</emphasis> pour l'activer, nous le permettons.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Autoriser l'utilisation de fonctions d'autoload personnalisées</emphasis>.
                    Certaines personnes ne veulent pas utiliser
                    <methodname>Zend_Loader::loadClass()</methodname> pour l'autoload, mais veulent
                    tout de même bénéficier des mécanismes du Zend Framework.
                    <classname>Zend_Loader_Autoloader</classname> permet de préciser ses propres
                    fonctions d'auto-chargement.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Permettre la manipulation de la chaine des autoloads de la
                    <acronym>SPL</acronym></emphasis>. Ceci autorise la spécification
                    d'autoloaders additionnels -- par exemple les chargeurs de ressources
                    pour les classes n'ayant pas une correspondance 1:1 avec le système de
                    fichiers -- ces autoloaders pouvant être chargés avant ou après
                    l'autoloader principal de Zend Framework.
                </para>
            </listitem>
        </itemizedlist>
    </sect2>
</sect1>
