Um das Autoloaden im Zend Framework zu verstehen, muss man zuerst die Abhängigkeit zwischen Klassennamen und Klassendateien verstehen.
Zend Framework hat sich eine Idee von PEAR
geborgt wobei Klassennamen eine 1:1 Beziehung zum Dateisystem haben. Einfach gesagt,
der Unterstrich ("_") wird durch einen Verzeichnis Separator ersetzt um den Pfad zur
Datei aufzulösen, und anschließend wird der Suffix ".php
"
hinzugefügt. Zum Beispiel würde die Klasse "Foo_Bar_Baz
" mit
"Foo/Bar/Baz.php
" auf dem Dateisystem korrespondieren. Die Annahme
ist auch, das die Klassen über PHP's
include_path Einstellung aufgelöst werden kann, welche es sowohl
include()
als auch require()
erlaubt
den Dateinamen über einen relativen Pfad Lookup im
include_path zu finden.
Zusätzlich, bei PEAR wie auch im PHP Projekt, verwenden und empfehlen wir die Verwendung eines Hersteller oder Projekt Präfixes für den eigenen Code. Was das bedeutet ist, dass alle Klassen die man schreibt den gleichen gemeinsamen Klassenpräfix teilen; zum Beispiel hat jeder Code im Zend Framework den Präfix "Zend_". Diese Namenskonvention hilft Namenskollisionen zu verhindern. Im Zend Framework referieren wir hierzu oft als "Namespace" Präfix; man sollte darauf achten das man dies nicht mit PHP's nativer Namespace Implementation verwechselt.
Zend Framework folgt diesen einfachen Regeln intern, und unser Coding Standard empfiehlt dass man dies in jedem Bibliotheks Code macht.
Zend Framework's unterstützung für das Autoloaden, welche primär über
Zend_Loader_Autoloader
angeboten wird, hat die folgenden Ziele
und Design Elemente:
-
Namespace Abgleich anbieten: Wenn der Namespace Präfix der Klasse nicht in der Liste der registrierten Namespaces ist, wird sofort
FALSE
zurückgegeben. Das erlaubt es einen optimistischeren Abgleich anzubieten, sowie als Fallback für andere Autoloader zu fungieren. -
Erlaubt dem Autoloader als Fallback Autoloader zu arbeiten: Im Falle das ein Team sehr weit verbreitet ist, oder ein unbekanntes Set von Namespace Präfixes verwendet, sollte der Autoloader trotzdem konfigurierbar sein damit er versucht jedem Namespace Präfix zu entsprechen. Es sollte trotzdem erwähnt werden das diese Praxis nicht empfohlen wird, da Sie auch zu unnötigen Lookups führt.
-
Erlaubt es Fehlerunterdrückung zu wechseln: Wir denken -- und die größere PHP Community tut das auch -- dass die Fehlerunterdrückung eine schlechte Idee ist. Sie ist teuer, und maskiert die rechten Probleme der Anwendung. Deswegen sollte sie standardmäßig ausgeschaltet sein. Trotzdem, wenn ein Entwickler darauf besteht das Sie eingeschaltet wenn soll, erlauben wir es Sie einzuschalten.
-
Erlaubt spezielle eigene Callbacks für Autoloading: Einige Entwickler wollen
Zend_Loader::loadClass()
für das Autoloaden nicht, aber trotzdem Zend Framework's Mechanismus hierfür verwenden.Zend_Loader_Autoloader
erlaubt es einen alternativen Callback für das Autoloaden zu spezifizieren. -
Erlaubt die Manipulation der Autload Callback Kette von SPL: Der Zweck hiervon ist es die Spezifikation von zusätzlichen Autoloadern zu verwenden -- zum Beispiel müssen Ressource Lader für Klassen keine 1:1 Entsprechung zum Dateisystem haben -- und Sie vor oder nach dem primären Zend Framework Autoloader zu registrieren.