Zum Inhalt springen

PHP OOP Basics: Autoloading – __autoload()

Nehmen wir einmal an, die ganzen Klassen liegen in einem Ordner /class/classname.php. Wir bräuchten dann also eine ziemlich lange Liste an include-Anweisungen am Anfang jeden Skripts.

Jetzt wäre es natürlich sinnvoll, wenn PHP das selbst laden könnte. Kann es, schauen wir uns an wie. 😉

1. __autoload()

Wenn die __autoload() Funktion definiert ist, wird diese von PHP immer aufgerufen, wenn eine Klasse oder ein Interface geladen werden soll, das nicht definiert ist.

Eine sinnvolle Implementierung könnte z.B. so aussehen:

<?php
function __autoload($classname) {
    $filename = "class/". $classname .".php";
    include_once($filename);
}

Wenn also z.B. die Klasse „MyClass“ nicht gefunden wird, include_once(„class/MyClass.php“); ausgeführt, um beim Beispiel der EInleitung zu bleiben. 😉

2. spl_autoload_register()

Die Funktion ist eine SPL Implementierung von __autoload(). Hiermit können beliebige Funktionen sozusagen als Autoload Funktion definiert werden. Die Tatsache, dass wir mehrere Funktionen definieren können und damit flexibler sind, ist auch der Vorteil im Vergleich zur Verwendung von __autoload(). Man denke z.B. an externe Bibliotheken etc..

Die Implementierung einer Autoload Funktion analog zum obigen Beispiel wäre:

<?php
function myautoloader($class) {
    include 'class/' . $class . '.php';
}
spl_autoload_register('myautoloader');

Wenn wir schon eine __autoload() im Code haben und nun aber spl_autoload_register() verwenden möchten, muss die __autoload() Funktion explizit registriert werden (Engine Cache wird bei Benutzung für die __autoload() Funktion durch spl_autoload() / spl_autoload_call() ersetzt).

Kommentare sind geschlossen, aber Trackbacks und Pingbacks sind möglich.