Autoloading àla Zend Framework

Wer hat sich schonmal gefragt, warum alle Klassen des Zend Frameworks immer so lang sein müssen? Zend_View_Helper_Navigation_Breadcrumbs, Zend_Db_Adapter_Pdo_Mysql oder auch sehr schön ist Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive.
Die Antwort ist ganz einfach: So lässt sich genau nachvollziehen, wo sich die Klasse befindet, denn aus dem Namen lässt sich das genaue Verzeichnis der Klasse ablesen. So liegt die Klasse Zend_View_Helper_Navigation_Breadcrumbs beispielsweise unter Zend/View/Helper/Navigation/Breadcrumbs.php. Dieses Schema bringt nicht nur Struktur in das Klassen-Chaos einer Anwendung, sondern bietet auch eine hervorragende Möglichkeit, die Klassen automatisch zu laden, ohne dass die Klasse jedes mal mit require_once inkludiert werden müssen. Dazu bedienen wir uns einfach der Funktion __autoload, die jedes mal aufgerufen wird, wenn eine Klasse verwendet wurde, die nicht existiert.

function __autoload($className)
{
    $classFile = implode("/", explode("_", $className)).".php";
    require_once(DEIN_ROOT_PFAD.$classFile);
}
$obj = new Zend_Db_Adapter_Pdo_Mysql(); // Lädt automatisch die Datei Zend/Db/Adapter/Pdo/Mysql.php

Natürlich lässt sich das noch weiter ausbauen und mit verschiedenen Include-Paths verwenden.
Wenn ihr also das nächste mal eine neue Anwendung plant, macht es Sinn, dasselbe Namensschema wie das Zend Framework oder PEAR zu nutzen. So müsst ihr euch nicht mehr darum kümmern, ob eine Klasse wirklich mit require oder include eingebunden wurde und die Klassen-Datei wird nur noch dann geladen, wenn sie tatsächlich gebraucht wird.

Und noch ein Tipp:
Mit Hilfe der Funktion spl_autoload_register($callback) lassen sich mehrere Autoloader gleichzeitig verwenden und können als Callback auch in eigene Klasse ausgelagert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.