Cele i budowa
Konwencja nazewnictwa klas
Aby zrozumieć autoloader w Zend Framework, należy najpierw zrozumieć połączenie
pomiędzy nazwami klas a ich plikami.
Budując Zend Framework zapożyczono ideę organizacji klas z biblioteki
PEAR. 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 ".php". Przykładowo,
klasa "Foo_Bar_Baz" odpowiadałaby ścieżce dostępu
"Foo/Bar/Baz.php". Dodatkowo respektowane są ustawienia
zmiennej konfiguracyjnej PHP - include_path,
dzięki czemu możliwe jest użycie include() oraz
require() i wyszukanie pliku wg. ścieżki względnej do katalogów
w include_path.
Dodatkowo, podobnie jak PEAR oraz
projekt PHP 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 PHP.
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.
Konwencja nazewnictwa i budowa autoloadera
Obsługa autoloadera w Zend Framework udostępniona głównie poprzez
Zend_Loader_Autoloader charakteryzuje się poniższymi celami
i elementami budowy:
Zapewnia przeszukiwanie przestrzeni nazw.
Jeśli prefiks przestrzeni nazw klasy nie znajduje się na liście zarejestrowanych
przestrzeni - od razu zwracana jest wartość FALSE.
Dzięki temu może nastąpić szybsze przełączenie do ewentualnego kolejnego
Umożliwienie działania autoloadera jako ostatniej instancji.
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.
Umożliwienie włączaniania i wyłączania raportowania błędów.
Twórcy ZF - jak i większa część społeczności PHP - 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 chce ją włączyć to jest to
umożliwione.
Umożliwienie skonfigurowania własnych funkcji oferujących
funkcjonalność autoloadera.
Część deweloperów nie będzie chciała używać
Zend_Loader::loadClass() jednocześnie nie rezygnując
z mechanizmów Zend Framework.
Klasa Zend_Loader_Autoloader umożliwia wyszczególnienie
alternatywnej funkcji oferującej taką samą funkcjonalność.
Umożliwienie manipulacji łańcuchem funkcji autoload w
SPL.
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.