Hallo,
nach der letzten ausführlich Erörterung des SPL Autoloaders hier in diesem Forum, stehe ich nun vor einem Problem, dessen Lösung ich noch nicht gefunden habe.
Es gibt ein Programm, welches ich hier mal Hauptprogramm nenne. Dieses Programm bindet seinen Autoloader via spl_register() ein. Die Autoload Funktion selbst ist in einer Klasse untergebracht.
Ich habe nun ein Plugin für dieses Hauptprogramm geschrieben, welches eine weitere Autoload Funktion via spl_register() einbindet. Diese Autoload Funktion kommt ebenso aus einer Klasse, die aber direkt zum Plugin gehört.
Der Stack der SPL Autoload Funktionen sieht nun so aus:
So wie ich die Dokumentation verstanden habe, werden nun beide im Stack befindlichen Autoload Funktionen nacheinander abgearbeitet, um die entsprechenden Klassen aufzurufen. Dies passiert bei mir aber nicht.
Ich erhalte folgende Fehlermeldung:
Die Klasse Calendar sollte im Grunde genommen mit PluginAutoload::PluginAutoloader() gefunden werden.
Habe ich jetzt etwas missverstanden? Wieso wird die Klasse nicht über den zweiten Autoloader gefunden?
PS: Die Bezeichnungen für die Autoloader Klassen sind frei erfunden und kommen so in der Realität natürlich nicht vor. Nur so als Beispiel eben ...
EDIT: Ich habe mir jetzt die genaue Struktur des CoreAutoloaders angesehen. Hierin steht:
Verhindert die() in der Funktion CoreAutoloader() das vernünftige Abarbeiten des SPL Stacks?
nach der letzten ausführlich Erörterung des SPL Autoloaders hier in diesem Forum, stehe ich nun vor einem Problem, dessen Lösung ich noch nicht gefunden habe.
Es gibt ein Programm, welches ich hier mal Hauptprogramm nenne. Dieses Programm bindet seinen Autoloader via spl_register() ein. Die Autoload Funktion selbst ist in einer Klasse untergebracht.
Ich habe nun ein Plugin für dieses Hauptprogramm geschrieben, welches eine weitere Autoload Funktion via spl_register() einbindet. Diese Autoload Funktion kommt ebenso aus einer Klasse, die aber direkt zum Plugin gehört.
Der Stack der SPL Autoload Funktionen sieht nun so aus:
PHP-Code:
Array
(
[0] => Array
(
[0] => CoreAutoload
[1] => CoreAutoloader
)
[1] => Array
(
[0] => PluginAutoload
[1] => PluginAutoloader
)
)
Ich erhalte folgende Fehlermeldung:
CoreAutoload::CoreAutoloader() - Die notwendige Klasse: Calendar konnte nicht gefunden werden.
Habe ich jetzt etwas missverstanden? Wieso wird die Klasse nicht über den zweiten Autoloader gefunden?
PS: Die Bezeichnungen für die Autoloader Klassen sind frei erfunden und kommen so in der Realität natürlich nicht vor. Nur so als Beispiel eben ...
EDIT: Ich habe mir jetzt die genaue Struktur des CoreAutoloaders angesehen. Hierin steht:
PHP-Code:
class CoreAutoload {
public static function CoreAutoloader($className) {
if (file_exists(PATH.$className.'.class.php')) {
require_once(PATH.$className.'.class.php');
} else {
die('Die notwendige Klasse: '.$className.' konnte nicht gefunden werden.');
}
}
public static function Register() {
spl_autoload_register(array(__class__, 'CoreAutoloader'));
}
}
CoreAutoload::Register();
Kommentar