| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.loader.autoloader">
- <title>L'autoloader</title>
- <para>
- <classname>Zend_Loader_Autoloader</classname> propose une solution intelligente et
- souple d'auto-chargement (autoload) pour Zend Framework. Il a été conçu pour remplir
- plusieurs objectifs :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Proposer un autoloader à base d'espaces de noms (auparavant, les espaces de
- noms étaient interceptés).
- </para>
- </listitem>
- <listitem>
- <para>
- Proposer d'enregistrer des autoloads personnalisés, et les gérer comme une
- pile. (A l'heure actuelle, ceci permet de s'affranchir de certaines contraintes avec
- <code>spl_autoload</code>, qui ne permet pas le ré-enregistrement d'une fonction à
- base d'objet).
- </para>
- </listitem>
- <listitem>
- <para>
- Proposer un autoload optimisé pour les espaces de noms, qui permet une
- meilleure résolution des noms de classes.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- <classname>Zend_Loader_Autoloader</classname> est un singleton, il est donc
- universellement accessible. Ceci permet d'enregistrer des autoload depuis n'importe où dans
- votre code.
- </para>
- <sect2 id="zend.loader.autoloader.usage">
- <title>Utiliser le chargeur automatique (autoloader)</title>
- <para>
- La première fois qu'une instance de l'autoloader est créée, il s'enregistre
- lui-même sur la fonction <code>spl_autoload</code>. Vous récupérez son instance via la
- méthode <code>getInstance()</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader = Zend_Loader_Autoloader::getInstance();
- ]]></programlisting>
- <para>
- Par défaut, l'autoloader est configurer pour capturer les espaces de noms "Zend_"
- et "ZendX_". Si votre propre librairie de code utilise un espace de noms différent, vous
- devez alors enregistrer celui-ci avec la méthode <code>registerNamespace()</code>. Par
- exemple, si votre librairie possède l'espace de noms "My_", vous devriez agir comme
- cela :
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->registerNamespace('My_');
- ]]></programlisting>
- <note>
- <title>Préfixes des espaces de noms</title>
- <para>
- Notez que l'exemple précédent enregistre "My_" et non "My". Ceci car
- <classname>Zend_Loader_Autoloader</classname> est un autoloader global, et n'a
- aucune idée qu'un préfixe de classe possède un underscore. Si c'est <emphasis>votre
- </emphasis> cas, alors faites le apparaître lors de son enregistrement dans
- l'autoloader.
- </para>
- </note>
- <para>
- Il est aussi possible que vous enregistriez vos propres fonctions d'autoload,
- optionnellement avec un espace de noms spécifique,
- <classname>Zend_Loader_Autoloader</classname> va alors tenter de l'utiliser lorsque
- nécessaire (lors de l'auto-chargement).
- </para>
- <para>
- Par exemple, vous pourriez avoir besoin d'un ou plusieurs composants eZcomponents
- avec votre application Zend Framework. Pour utiliser ses capacités d'autoload, ajoutez
- son autoloader à votre pile grâce à <code>pushAutoloader()</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->pushAutoloader(array('ezcBase', 'autoload'), 'ezc');
- ]]></programlisting>
- <para>
- Ceci indique que les classes dont le nom commence par "ezc" devra utiliser cette
- fonction d'autoload.
- </para>
- <para>
- <code>unshiftAutoloader()</code>, elle, rajoute la méthode d'autoload au début de
- la pile.
- </para>
- <para>
- Par défaut, <classname>Zend_Loader_Autoloader</classname> ne supprime aucune
- erreur lorsqu'il utilise son autoloader interne, s'appuyant sur
- <classname>Zend_Loader::loadClass()</classname>. La plupart du temps, c'est le
- comportement recherché. Cependant, si vous voulez faire apparaître les éventuelles
- erreurs de chargement, appelez alors <code>suppressNotFoundWarnings()</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->suppressNotFoundWarnings(true);
- ]]></programlisting>
- <para>
- Enfin, il se peut que vous vouliez que l'autoloader par défaut charge toutes les
- classes de tous les espaces de noms. Par exemple, les librairies PEAR ne partagent pas
- un espace de noms commun, ce qui rend la tâche difficile si on veut associer chacun des
- espaces de noms internes. Utilisez alors <code>setFallbackAutoloader()</code> pour
- rendre l'autoloader "global" et charger tous les espaces de noms :
- </para>
- <programlisting language="php"><![CDATA[
- $autoloader->setFallbackAutoloader(true);
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.loader.autoloader.interface">
- <title>L'interface de l'autoloader</title>
- <para>
- Vous pouvez donc ajouter des fonctions de chargement par espace de noms, mais Zend
- Framework définit aussi une interface pour l'autoload,
- <classname>Zend_Loader_Autoloader_Interface</classname> :
- </para>
- <programlisting language="php"><![CDATA[
- interface Zend_Loader_Autoloader_Interface
- {
- public function autoload($class);
- }
- ]]></programlisting>
- <para>
- L'utilisation de l'interface vous permet de passer un objet aux méthodes
- <code>pushAutoloader()</code> et <code>unshiftAutoloader()</code> de
- <classname>Zend_Loader_Autoloader</classname> :
- </para>
- <programlisting language="php"><![CDATA[
- // Foo_Autoloader implémente Zend_Loader_Autoloader_Interface:
- $foo = new Foo_Autoloader();
- $autoloader->pushAutoloader($foo, 'Foo_');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.loader.autoloader.reference">
- <title>Référence de l'autoloader</title>
- <para>
- Voici un guide des méthodes de
- <classname>Zend_Loader_Autoloader</classname>.
- </para>
- <table id="zend.loader.autoloader.reference.api">
- <title>Méthodes de Zend_Loader_Autoloader</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Méthode</entry>
- <entry>Valeur de retour</entry>
- <entry>Paramètres</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>getInstance()</code></entry>
- <entry><classname>Zend_Loader_Autoloader</classname></entry>
- <entry>N/A</entry>
- <entry>
- <para>
- Retourne l'instance singleton de
- <classname>Zend_Loader_Autoloader</classname> Au premier appel,
- enregistre l'autoloader avec <code>spl_autoload</code>. Cette
- méthode est statique.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>resetInstance()</code></entry>
- <entry><code>void</code></entry>
- <entry>N/A</entry>
- <entry>
- <para>
- Remet à zéro l'état interne de
- <classname>Zend_Loader_Autoloader</classname> en désenregistrant les
- fonctions d'autoload éventuellement présentes, ainsi que tous les
- espaces de noms.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>autoload($class)</code></entry>
- <entry><code>string|false</code></entry>
- <entry>
- <itemizedlist>
- <listitem>
- <para>
- <code>$class</code>, <emphasis>requis</emphasis>. Une
- classe à charger.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Essaye de résoudre un nom de classe en fichier, et tente de la
- charger.
- </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>requis</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Spécifie une fonction PHP à utiliser comme autoloader par défaut.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>getDefaultAutoloader()</code></entry>
- <entry><code>callback</code></entry>
- <entry>N/A</entry>
- <entry>
- <para>
- Retourne la fonction d'autoload par défaut, il s'agit par
- défaut de <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>requis</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Passe une liste d'autoloaders (sous forme de noms de
- fonctions PHP) à ajouter à la pile de ceux déjà présents.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>getAutoloaders()</code></entry>
- <entry><code>array</code></entry>
- <entry>N/A</entry>
- <entry><para>Récupère la pile d'autoloaders interne.</para></entry>
- </row>
- <row>
- <entry><code>getNamespaceAutoloaders($namespace)</code></entry>
- <entry><code>array</code></entry>
- <entry>
- <itemizedlist>
- <listitem>
- <para>
- <code>$namespace</code>,
- <emphasis>requis</emphasis>
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Récupère tous les autoloaders qui sont associés à un
- certain espace de noms.
- </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>requis</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Enregistre un ou plusieurs espaces de noms, avec
- l'autoloader par défaut. Si <code>$namespace</code> est une chaîne,
- c'est cet espace de noms qui sera enregistré, si c'est un tableau de
- chaînes, ils le seront tous.
- </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>requis</emphasis>.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Désenregistre (supprime) un espace de noms depuis
- l'autoloader par défaut. Si <code>$namespace</code> est une chaîne,
- c'est cet espace de noms qui sera désenregistré, si c'est un tableau
- de chaînes, ils le seront tous.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>getRegisteredNamespace()</code></entry>
- <entry><code>array</code></entry>
- <entry>N/A</entry>
- <entry>
- <para>
- Retourne un tableau comportant tous les espaces de noms
- enregistrés avec l'autoloader par défaut.
- </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>optionnel</emphasis>.</para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Affecte ou récupère la valeur du paramètre indiquant si l'autoloader
- par défaut doit supprimer les warnings "file not found". Si aucun
- argument (ou null) lui est passé, il retourne sa valeur actuelle,
- dans le cas contraire, il retournera l'instance de l'autoloader
- permettant le chainage des méthodes.
- </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>requis</emphasis>.</para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Affecte la valeur du drapeau utilisé pour déterminer si
- l'autoloader par défaut doit être utilisé comme "catch-all" pour
- charger tous les espaces de noms.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>isFallbackAutoloader()</code></entry>
- <entry><code>boolean</code></entry>
- <entry>N/A</entry>
- <entry>
- <para>
- Retourne la valeur du drapeau utilisé pour déterminer si
- l'autoloader par défaut doit être utilisé comme "catch-all" pour
- charger tous les espaces de noms.
- </para>
- </entry>
- </row>
- <row>
- <entry><code>getClassAutoloaders($class)</code></entry>
- <entry><code>array</code></entry>
- <entry>
- <itemizedlist>
- <listitem>
- <para><code>$class</code>, <emphasis>requis</emphasis>.</para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Retourne une liste d'autoloaders d'espaces de noms qui pourraient
- correspondre à la classe indiquée. Si aucun ne correspond, la
- liste de tous les autoloaders globaux (non associés à des espaces de
- noms) sera retournée.
- </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>requis</emphasis>. Une
- fonction PHP valide.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>$namespace</code>, <emphasis>optionnel</emphasis>.
- Une chaîne représentant un préfixe de classe.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Ajoute un autoloader au début de la pile des autoloaders
- internes. Si un espace de noms est fourni, il sera utilisé pour cet
- autoloader, sinon l'autoloader sera global.
- </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>requis</emphasis>. Une
- fonction PHP valide.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>$namespace</code>, <emphasis>optionnel</emphasis>.
- Une chaîne représentant un préfixe de classe.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Ajoute un autoloader à la fin de la pile des autoloaders
- internes. Si un espace de noms est fourni, il sera utilisé pour cet
- autoloader, sinon l'autoloader sera global.
- </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>requis</emphasis>. Une
- fonction PHP valide.
- </para>
- </listitem>
- <listitem>
- <para>
- <code>$namespace</code>, <emphasis>optionnel</emphasis>.
- Une chaîne représentant un préfixe de classe, ou un tableau
- de chaînes.
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- <entry>
- <para>
- Supprime un autoloader de la pile interne. Si un espace de
- noms est indiqué, supprime l'autoloader pour cet espace de noms
- uniquement.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- </sect1>
|