autoloading-design.xml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.autoloading.design">
  5. <title>Architecture et buts</title>
  6. <sect2 id="learning.autoloading.design.naming">
  7. <title>Convention de noms des classes</title>
  8. <para>
  9. Pour comprendre l'autochargement dans le Zend Framework, vous devez d'abord comprendre
  10. la relation entre nom de classe et nom de fichier.
  11. </para>
  12. <para>
  13. Zend Framework a emprunté une idée de <ulink url="http://pear.php.net/">PEAR</ulink>,
  14. dans lequel les noms des classes ont une relation 1:1 avec le système de fichiers.
  15. Simplement, le caractère underscore ("_") est remplacé par un séparateur de dossier
  16. pour résoudre le chemin vers le fichier, puis le suffixe "<filename>.php</filename>"
  17. est ajouté. Par exemple, une classe "<classname>Foo_Bar_Baz</classname>" va
  18. correspondre à "<filename>Foo/Bar/Baz.php</filename>" sur le système de fichiers.
  19. La supposition est alors que <acronym>PHP</acronym> résoudra les fichier relativement
  20. à l'<property>include_path</property> ce qui permet d'utiliser
  21. <methodname>include()</methodname> et <methodname>require()</methodname> pour chercher
  22. le fichier relativement à l'<property>include_path</property>.
  23. </para>
  24. <para>
  25. Aussi, conformément à <acronym>PEAR</acronym> et au <ulink
  26. url="http://php.net/userlandnaming.tips">PHP project</ulink>, nous utilisons et
  27. vous recommandons d'utiliser un préfixe à votre code. Cela signifie que toutes les
  28. classes que vous écrivez doivent partager un préfixe unique, par exemple, dans
  29. Zend Framework le préfixe est "Zend_". Cette convention de noms évite toute collision
  30. dans les noms des classes. Dans Zend Framework, nous utilisons la notion "d'espace de
  31. noms" ("namespace"); attention à éviter la confusion avec l'implémentation native
  32. des espaces de noms de <acronym>PHP</acronym>.
  33. </para>
  34. <para>
  35. Zend Framework suit ces règles simples en interne et nos standards de code
  36. vous encouragent à faire de même avec le code de vos propres librairies.
  37. </para>
  38. </sect2>
  39. <sect2 id="learning.autoloading.design.autoloader">
  40. <title>Conventions et architecture d'Autoload</title>
  41. <para>
  42. Le support de l'autochargement (autoload) de Zend Framework, implémenté grâce à
  43. <classname>Zend_Loader_Autoloader</classname>, possède l'architecture et les
  44. buts suivants:
  45. </para>
  46. <itemizedlist>
  47. <listitem>
  48. <para>
  49. <emphasis>Correspondance d'espace de noms</emphasis>. Si l'espace de noms
  50. de la classe (son préfixe) n'est pas dans une liste pré-enregistrée, retourner
  51. <constant>FALSE</constant> immédiatement. Ceci permet une optimisation de la
  52. recherche ainsi que l'utilisation d'autres autoloaders ou d'un autoloader
  53. global par défaut.
  54. </para>
  55. </listitem>
  56. <listitem>
  57. <para>
  58. <emphasis>Permettre un auto-chargement "de secours"</emphasis>.
  59. Dans le cas où l'on ne peut lister ou prédéterminer les préfixes de manière
  60. claire et sûre, l'autoloader doit pouvoir être configuré pour charger n'importe
  61. quel espace de noms de classes. Notez que ce cas n'est pas recommandé car il
  62. fait intervenir des algorithmes complexes et non optimisés.
  63. </para>
  64. </listitem>
  65. <listitem>
  66. <para>
  67. <emphasis>Permettre la non-suppression des erreurs</emphasis>. Nous pensons
  68. -- et la plus grande partie de la communauté <acronym>PHP</acronym> aussi --
  69. que la suppression des erreurs est une mauvaise idée. C'est couteux en
  70. ressources et cela masque les problèmes réels de l'application. Ainsi, par
  71. défaut, la suppression des erreurs devrait être désactivée. Cependant, si
  72. un développeur <emphasis>insiste</emphasis> pour l'activer, nous le permettons.
  73. </para>
  74. </listitem>
  75. <listitem>
  76. <para>
  77. <emphasis>Autoriser l'utilisation de fonctions d'autoload personnalisées</emphasis>.
  78. Certaines personnes ne veulent pas utiliser
  79. <methodname>Zend_Loader::loadClass()</methodname> pour l'autoload, mais veulent
  80. tout de même bénéficier des mécanismes du Zend Framework.
  81. <classname>Zend_Loader_Autoloader</classname> permet de préciser ses propres
  82. fonctions d'auto-chargement.
  83. </para>
  84. </listitem>
  85. <listitem>
  86. <para>
  87. <emphasis>Permettre la manipulation de la chaine des autoloads de la
  88. <acronym>SPL</acronym></emphasis>. Ceci autorise la spécification
  89. d'autoloaders additionnels -- par exemple les chargeurs de ressources
  90. pour les classes n'ayant pas une correspondance 1:1 avec le système de
  91. fichiers -- ces autoloaders pouvant être chargés avant ou après
  92. l'autoloader principal de Zend Framework.
  93. </para>
  94. </listitem>
  95. </itemizedlist>
  96. </sect2>
  97. </sect1>