autoloading-design.xml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.autoloading.design">
  5. <title>Cele i budowa</title>
  6. <sect2 id="learning.autoloading.design.naming">
  7. <title>Konwencja nazewnictwa klas</title>
  8. <para>
  9. Aby zrozumieć autoloader w Zend Framework, należy najpierw zrozumieć połączenie
  10. pomiędzy nazwami klas a ich plikami.
  11. </para>
  12. <para>
  13. Budując Zend Framework zapożyczono ideę organizacji klas z biblioteki
  14. <ulink url="http://pear.php.net/">PEAR</ulink>. Według niej relacja klas do plików
  15. wynosi 1:1. W skrócie: aby odnaleźć ścieżkę do odpowiedniego pliku
  16. znak podkreślenia ("_") w nazwach klas jest zastępowany znakiem oddzielenia katalogu
  17. a następnie dodawane jest rozszerzenie "<filename>.php</filename>". Przykładowo,
  18. klasa "<classname>Foo_Bar_Baz</classname>" odpowiadałaby ścieżce dostępu
  19. "<filename>Foo/Bar/Baz.php</filename>". Dodatkowo respektowane są ustawienia
  20. zmiennej konfiguracyjnej <acronym>PHP</acronym> - <property>include_path</property>,
  21. dzięki czemu możliwe jest użycie <methodname>include()</methodname> oraz
  22. <methodname>require()</methodname> i wyszukanie pliku wg. ścieżki względnej do katalogów
  23. w <property>include_path</property>.
  24. </para>
  25. <para>
  26. Dodatkowo, podobnie jak <acronym>PEAR</acronym> oraz
  27. <ulink url="http://php.net/userlandnaming.tips">projekt PHP</ulink> praktykowane i
  28. zalecane jest użycie w kodzie prefiksów charakterystycznych dla projektu lub producenta.
  29. To oznacza, że wszystkie klasy powinny dzielić jeden wspólny prefiks. Przykładowo,
  30. wszystkie klasy w Zend Framework mają prefiks "Zend_". Taka konwencja chroni
  31. przed kolizjami nazw. W ramach Zend Framework przybiera to nazwę prefiksu przestrzeni
  32. nazw. Należy zachować ostrożność aby nie pomylić tego z natywną obsługą przestrzeni
  33. nazw w <acronym>PHP</acronym>.
  34. </para>
  35. <para>
  36. Zend Framework podąża za tymi wskazówkami wewnętrznie ale nasze standardy zachęcają
  37. do ich stosowania także w kodzie aplikacji, innych bibliotek itp.
  38. </para>
  39. </sect2>
  40. <sect2 id="learning.autoloading.design.autoloader">
  41. <title>Konwencja nazewnictwa i budowa autoloadera</title>
  42. <para>
  43. Obsługa autoloadera w Zend Framework udostępniona głównie poprzez
  44. <classname>Zend_Loader_Autoloader</classname> charakteryzuje się poniższymi celami
  45. i elementami budowy:
  46. </para>
  47. <itemizedlist>
  48. <listitem>
  49. <para>
  50. <emphasis>Zapewnia przeszukiwanie przestrzeni nazw</emphasis>.
  51. Jeśli prefiks przestrzeni nazw klasy nie znajduje się na liście zarejestrowanych
  52. przestrzeni - od razu zwracana jest wartość <constant>FALSE</constant>.
  53. Dzięki temu może nastąpić szybsze przełączenie do ewentualnego kolejnego
  54. </para>
  55. </listitem>
  56. <listitem>
  57. <para>
  58. <emphasis>Umożliwienie działania autoloadera jako ostatniej instancji</emphasis>.
  59. W przypadku, gdy zespół programistów jest w dużym stopniu rozproszony lub
  60. lista respektowanych prefiksów przestrzeni nazw jest zmienna, autoloader
  61. powinien zachować swoją funkcjonalność w taki sposób, żeby możliwe było
  62. użycie każdego prefiksu przestrzeni nazw. Trzeba zwrócić uwagę na fakt, iż
  63. takie zachowanie nie jest zalecane i może prowadzić do
  64. niepotrzebnego wydłużenia procesu wyszukania pliku.
  65. </para>
  66. </listitem>
  67. <listitem>
  68. <para>
  69. <emphasis>Umożliwienie włączaniania i wyłączania raportowania błędów</emphasis>.
  70. Twórcy ZF - jak i większa część społeczności <acronym>PHP</acronym> - uważają,
  71. że zapobieganie raportowaniu błędów jest złym pomysłem. Jest kosztowne i
  72. powoduje ukrycie realnych problemów aplikacji. Domyślnie opcja ta powinna być
  73. wyłączona ale jeśli deweloper <emphasis>chce</emphasis> ją włączyć to jest to
  74. umożliwione.
  75. </para>
  76. </listitem>
  77. <listitem>
  78. <para>
  79. <emphasis>Umożliwienie skonfigurowania własnych funkcji oferujących
  80. funkcjonalność autoloadera</emphasis>.
  81. Część deweloperów nie będzie chciała używać
  82. <methodname>Zend_Loader::loadClass()</methodname> jednocześnie nie rezygnując
  83. z mechanizmów Zend Framework.
  84. Klasa <classname>Zend_Loader_Autoloader</classname> umożliwia wyszczególnienie
  85. alternatywnej funkcji oferującej taką samą funkcjonalność.
  86. </para>
  87. </listitem>
  88. <listitem>
  89. <para>
  90. <emphasis>Umożliwienie manipulacji łańcuchem funkcji autoload w
  91. <acronym>SPL</acronym></emphasis>.
  92. Celem tego założenia jest pozwolenie na określenie przez dewelopera dodatkowych
  93. funkcji oferujących funkcjonalność autoloadera - np. dla funkcje ładujące
  94. zasoby dla klas, które nie mają relacji 1:1 z plikami - aby były zarejestrowane
  95. przed lub po domyślnym mechanizmie autoloadera Zend Framework.
  96. </para>
  97. </listitem>
  98. </itemizedlist>
  99. </sect2>
  100. </sect1>