Viele 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. Man kann eine __autoload Funktion definieren, die automatisch aufgerufen wird, falls man versucht eine noch nicht definierte Klasse oder ein nicht definiertes Interface zu benutzen. Durch den Aufruf dieser Funktion erhält die Scripting Engine einen letzten Versuch, die Klasse zu laden, bevor PHP unter Ausgabe einer Fehlermeldung scheitert.
Hinweis: Exceptions, die in einer __autoload Funktion geworfen werden, sind nicht in einem Catch-Block fangbar und führen zu einem fatalen Fehler.
Hinweis: Autoloading ist nicht verfügbar, wenn man PHP im CLI interaktiven Modus betreibt.
Hinweis: Wird der Klassenname z.B. an die Funktion call_user_func() ist zu beachten das er gefährliche Zeichen wie z.B. ../ enthalten kann. Es wird daher empfohlen keine Benutzereingaben an solche Funktionen weiterzugeben oder zumindest die Eingaben in der __autoload() zu prüfen.
Beispiel #1 Autoload Beispiel
Dieses Beispiel versucht die Klassen MyClass1 und MyClass2 aus den entsprechenden Dateien MyClass1.php und MyClass2.php zu laden.
<?php
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Beispiel #2 Weiteres Autoload Beispiel
Dieses Beispiel versucht das Interface ITest zu laden.
<?php
function __autoload($name) {
var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>