autoloading-design.xml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.autoloading.design">
  5. <title>Ziele und Design</title>
  6. <sect2 id="learning.autoloading.design.naming">
  7. <title>Konventionen für Klassennamen</title>
  8. <para>
  9. Um das Autoloaden im Zend Framework zu verstehen, muss man zuerst die Abhängigkeit
  10. zwischen Klassennamen und Klassendateien verstehen.
  11. </para>
  12. <para>
  13. Zend Framework hat sich eine Idee von <ulink url="http://pear.php.net/">PEAR</ulink>
  14. geborgt wobei Klassennamen eine 1:1 Beziehung zum Dateisystem haben. Einfach gesagt,
  15. der Unterstrich ("_") wird durch einen Verzeichnis Separator ersetzt um den Pfad zur
  16. Datei aufzulösen, und anschließend wird der Suffix "<filename>.php</filename>"
  17. hinzugefügt. Zum Beispiel würde die Klasse "<classname>Foo_Bar_Baz</classname>" mit
  18. "<filename>Foo/Bar/Baz.php</filename>" auf dem Dateisystem korrespondieren. Die Annahme
  19. ist auch, das die Klassen über <acronym>PHP</acronym>'s
  20. <property>include_path</property> Einstellung aufgelöst werden kann, welche es sowohl
  21. <methodname>include()</methodname> als auch <methodname>require()</methodname> erlaubt
  22. den Dateinamen über einen relativen Pfad Lookup im
  23. <property>include_path</property> zu finden.
  24. </para>
  25. <para>
  26. Zusätzlich, bei <acronym>PEAR</acronym> wie auch im <ulink
  27. url="http://php.net/userlandnaming.tips">PHP Projekt</ulink>, verwenden und
  28. empfehlen wir die Verwendung eines Hersteller oder Projekt Präfixes für den eigenen
  29. Code. Was das bedeutet ist, dass alle Klassen die man schreibt den gleichen gemeinsamen
  30. Klassenpräfix teilen; zum Beispiel hat jeder Code im Zend Framework den Präfix "Zend_".
  31. Diese Namenskonvention hilft Namenskollisionen zu verhindern. Im Zend Framework
  32. referieren wir hierzu oft als "Namespace" Präfix; man sollte darauf achten das man dies
  33. nicht mit <acronym>PHP</acronym>'s nativer Namespace Implementation verwechselt.
  34. </para>
  35. <para>
  36. Zend Framework folgt diesen einfachen Regeln intern, und unser Coding Standard empfiehlt
  37. dass man dies in jedem Bibliotheks Code macht.
  38. </para>
  39. </sect2>
  40. <sect2 id="learning.autoloading.design.autoloader">
  41. <title>Autoloader Konventionen und Design</title>
  42. <para>
  43. Zend Framework's unterstützung für das Autoloaden, welche primär über
  44. <classname>Zend_Loader_Autoloader</classname> angeboten wird, hat die folgenden Ziele
  45. und Design Elemente:
  46. </para>
  47. <itemizedlist>
  48. <listitem>
  49. <para>
  50. <emphasis>Namespace Abgleich anbieten</emphasis>: Wenn der Namespace Präfix der
  51. Klasse nicht in der Liste der registrierten Namespaces ist, wird sofort
  52. <constant>FALSE</constant> zurückgegeben. Das erlaubt es einen optimistischeren
  53. Abgleich anzubieten, sowie als Fallback für andere Autoloader zu fungieren.
  54. </para>
  55. </listitem>
  56. <listitem>
  57. <para>
  58. <emphasis>Erlaubt dem Autoloader als Fallback Autoloader zu arbeiten</emphasis>:
  59. Im Falle das ein Team sehr weit verbreitet ist, oder ein unbekanntes Set von
  60. Namespace Präfixes verwendet, sollte der Autoloader trotzdem konfigurierbar sein
  61. damit er versucht jedem Namespace Präfix zu entsprechen. Es sollte trotzdem
  62. erwähnt werden das diese Praxis nicht empfohlen wird, da Sie auch zu unnötigen
  63. Lookups führt.
  64. </para>
  65. </listitem>
  66. <listitem>
  67. <para>
  68. <emphasis>Erlaubt es Fehlerunterdrückung zu wechseln</emphasis>: Wir denken --
  69. und die größere <acronym>PHP</acronym> Community tut das auch -- dass die
  70. Fehlerunterdrückung eine schlechte Idee ist. Sie ist teuer, und maskiert die
  71. rechten Probleme der Anwendung. Deswegen sollte sie standardmäßig ausgeschaltet
  72. sein. Trotzdem, wenn ein Entwickler darauf <emphasis>besteht</emphasis> das Sie
  73. eingeschaltet wenn soll, erlauben wir es Sie einzuschalten.
  74. </para>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. <emphasis>Erlaubt spezielle eigene Callbacks für Autoloading</emphasis>:
  79. Einige Entwickler wollen <methodname>Zend_Loader::loadClass()</methodname> für
  80. das Autoloaden nicht, aber trotzdem Zend Framework's Mechanismus hierfür
  81. verwenden. <classname>Zend_Loader_Autoloader</classname> erlaubt es einen
  82. alternativen Callback für das Autoloaden zu spezifizieren.
  83. </para>
  84. </listitem>
  85. <listitem>
  86. <para>
  87. <emphasis>Erlaubt die Manipulation der Autload Callback Kette von
  88. <acronym>SPL</acronym></emphasis>: Der Zweck hiervon ist es die Spezifikation
  89. von zusätzlichen Autoloadern zu verwenden -- zum Beispiel müssen Ressource Lader
  90. für Klassen keine 1:1 Entsprechung zum Dateisystem haben -- und Sie vor oder
  91. nach dem primären Zend Framework Autoloader zu registrieren.
  92. </para>
  93. </listitem>
  94. </itemizedlist>
  95. </sect2>
  96. </sect1>