Ich habe verschiedene Überlegungen angestellt wie man __autoload ( ) implementieren könnte. Die Klasse / Funktion kann höchstens bei Libary Klassen wissen ob die Datei existiert, die anderen Dateien werden vom Programmierer angelegt.
Bisher war die Funktion wie folgt aufgebaut (PATH verweist auf das absolute Verzeichnis):
Die SPL-Klasse ermöglicht es aber auch Funktionen aus Klassen als autoload-Handler zu definieren. Darüber wäre es möglich auch ohne global Werte zu speichern (und darüber hinaus auch besser im Framework verwendbar.)
Die Frage wie der Vorgang am schnellsten ablaufen kann (Da die Funktion bei jedem new ... aufgerufen wird ist das wiederholte Ausführen von file_exists nicht unbedingt performant.
Möglichkeiten wären
Bisher war die Funktion wie folgt aufgebaut (PATH verweist auf das absolute Verzeichnis):
PHP-Code:
function __autoload ( $class ) {
$classPath = str_replace ( '_', '/', $class );
if ( file_exists ( PATH . 'Libary/' . $classPath . '.php' ) ) {
include ( PATH . 'Libary/' . $classPath . '.php' );
} elseif ( file_exists( PATH . 'Application/' . $classPath . '.php' ) ) {
... // vier mögliche Pfade
}
}
Die Frage wie der Vorgang am schnellsten ablaufen kann (Da die Funktion bei jedem new ... aufgerufen wird ist das wiederholte Ausführen von file_exists nicht unbedingt performant.
Möglichkeiten wären
- zu speichern ob eine Datei existiert / nicht existiert (da es normalerweise nicht mehr als einen Aufruf von einer Klasse gibt nicht umbedingt sinnvoll)
- Eine Liste mit allen Dateien zu erstellen (in den möglichen Pfaden) - die Frage ist wie man mit Klassen wie Model_Blog umgeht (Verzeichnis: Application/Model/Blog.php)
EDIT:
für alle Verzeichnisse einen Handler zu registrieren und spl_autoload_call alle durchlaufen lassen.PHP-Code:public function __autoloadController ( $controller ) {
try {
include ( .... );
}
}
Kommentar