1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
<?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>
|