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