|
AutoloadingViele Entwickler, die objektorientierte Anwendungen entwickeln, erzeugen eine eigene PHP Quelldatei für jede Klassendefinition. Eines der größten Ärgernisse ist die Notwendigkeit, eine lange Liste von benötigten Include-Anweisungen am Anfang eines jeden Skripts (eine für jede Klasse). In PHP 5 ist das nicht länger notwendig. Die spl_autoload_register Funktion registriert eine beliebige Anzahl von Autoladern, die es ermöglichen, dass Klassen und Schnittstellen automatisch geladen werden, wenn sie derzeit nicht definiert sind. Durch das Registrieren von Autoladern erhält PHP einen letzten Versuch, die Klasse zu laden, bevor es unter Ausgabe einer Fehlermeldung scheitert. Tipp
Obwohl die __autoload Funktion ebenso für das automatische Laden von Klassen und Schnittstellen genutzt werden kann, ist es zu bevorzugen die spl_autoload_register Funktion zu verwenden. Dies ist so, weil sie eine flexiblere Alternative darstellt (die es ermöglicht eine beliebige Anzahl von Autoladern in der Anwendung zu spezifizieren, wie etwa bei Fremdbibliotheken). Aus diesem Grund wird von der Verwendung von __autoload abgeraten und diese Funktion könnte zukünftig als veraltet gekennzeichnet werden.
Beispiel #1 Autoload Beispiel Dieses Beispiel versucht die Klassen MyClass1 und MyClass2 aus den entsprechenden Dateien MyClass1.php und MyClass2.php zu laden.
<?phpBeispiel #2 Weiteres Autoload Beispiel Dieses Beispiel versucht das Interface ITest zu laden.
<?phpBeispiel #3 Autoloading mit Ausnahmebehandlung für 5.3.0+ In diesem Beispiel wird eine Exception geworfen und ein try/catch-Block demonstriert.
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Möchte NonLoadableClass laden. Kann NonLoadableClass nicht laden. Beispiel #4 Autoloading mit Ausnahmebehandlung für 5.3.0+ mit fehlender eigener Exception In diesem Beispiel wird eine Exception geworfen für eine nicht ladbare eigene Exception.
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Möchte NonLoadableClass laden. Möchte MissingException laden. Fatal error: Class 'MissingException' not found in testMissingException.php on line 4 |