Ziele und Design

Konventionen für Klassennamen

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.

Autoloader Konventionen und Design

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.