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