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