[MANUAL] English:
[zend.git] / documentation / manual / pl / tutorials / autoloading-design.xml
blob2232f63597902d4366586e7af61a77d3d233c583
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20115 -->
3 <!-- Reviewed: no -->
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>
10         <para>
11             Aby zrozumieć autoloader w Zend Framework, należy najpierw zrozumieć połączenie
12             pomiędzy nazwami klas a ich plikami. 
13         </para>
15         <para>
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>.
27         </para>
29         <para>
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>.
38         </para>
40         <para>
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.
43         </para>
44     </sect2>
46     <sect2 id="learning.autoloading.design.autoloader">
47         <title>Konwencja nazewnictwa i budowa autoloadera</title>
49         <para>
50             Obsługa autoloadera w Zend Framework udostępniona głównie poprzez
51             <classname>Zend_Loader_Autoloader</classname> charakteryzuje się poniższymi celami
52             i elementami budowy:
53         </para>
55         <itemizedlist>
56             <listitem>
57                 <para>
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
62                 </para>
63             </listitem>
65             <listitem>
66                 <para>
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.
74                 </para>
75             </listitem>
77             <listitem>
78                 <para>
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
84                     umożliwione.
85                 </para>
86             </listitem>
88             <listitem>
89                 <para>
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ść.
97                 </para>
98             </listitem>
100             <listitem>
101                 <para>
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. 
108                 </para>
109             </listitem>
110         </itemizedlist>
111     </sect2>
112 </sect1>