Grundsätzliche Verwendung von AutoloadernJetzt da wir verstehen was Autoloading ist, und was die Ziele und das Design von Zend Framework's Autoloading Lösung sind, schauen wir und an wie Zend_Loader_Autoloader verwendet wird. Im einfachsten Fall wird die Klasse einfach mit "require" verwendet und anschließend instanziert. Da Zend_Loader_Autoloader ein Singleton ist (aus dem Grund da auch der SPL Autoloader eine einzelne Ressource ist) verwenden wir getInstance() um eine Instanz zu erhalten.
Standardmäßig erlaubt dies das Laden jeder Klasse mit dem Klassen Namespace Präfix "Zend_" oder "ZendX_", solange Sie im eigenen include_path liegen. Was passiert wenn man andere Namespace Präfix verwenden will? Der beste und einfachste Weg ist der Aufruf der registerNamespace() Methode auf der Instanz. Man kann einen einzelnen Namespace Präfix übergeben, oder ein Array von Ihnen:
Alternativ kann man Zend_Loader_Autoloader sagen das es als "fallback" Autoloader arbeiten soll. Das bedeutet das er versuchen wird jede Klasse aufzulösen unabhängig vom Namespace Präfix.
Warning
Ein Fallback Autloader sollte nicht verwendet werdenWärend es nützlich erscheint Zend_Loader_Autoloader als Fallback Autoloader zu verwenden, empfehlen wir diese Praxis nicht. Intern verwendet Zend_Loader_Autoloader Zend_Loader::loadClass() um Klassen zu laden. Diese Methode verwendet include() um zu versuchen die gegebene Klassendatei zu laden. include() gibt ein boolsches FALSE zurück wenn es nicht erfolgreich war -- löst aber auch eine PHP Warnung aus. Der letztere Fakt kann zu einigen Problemen führen:
Man kann die Fehlermeldungen unterdrücken (die Dokumentation von Zend_Loader_Autoloader gibt Details), aber man sollte beachten die Unterdrückung nur relevant ist wenn display_errors aktiviert ist; das Fehler Log wird die Meldung immer zeigen. Aus diesem Grund empfehlen wir die Namespace Präfixe welche der Autoloader behandeln soll, immer zu konfigurieren.
Wenn man eigene Autoloader hat, die man mit Zend Framework verwenden will -- möglicherweise einen Autoloader von einer anderen Bibliothek die man verwendet -- kann man das mit Zend_Loader_Autoloader's pushAutoloader() und unshiftAutoloader() Methoden durchführen. Diese Methoden stellen Autoloader einer Kette voran welche aufgerufen wird, oder hängen Sie an, bevor Zend Framework's interner autoloading Mechanismus ausgeführt wird. Dieser Ansatz bietet die folgenden Vorteile:
Autoloader welche auf diesem Weg gemanaged werden können alle gültigen PHP Callbacks sein.
|