# 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.