Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 26-01-2009, 19:57
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard [OOP] Verständnisproblem mit spl_autoload

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:
PHP-Code:
Array
(
    [
0] => Array
        (
            [
0] => CoreAutoload
            
[1] => CoreAutoloader
        
)

    [
1] => Array
        (
            [
0] => PluginAutoload
            
[1] => PluginAutoloader
        
)


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:
Zitat:
CoreAutoload::CoreAutoloader() - Die notwendige Klasse: Calendar konnte nicht gefunden werden.
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:
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(); 
Verhindert die() in der Funktion CoreAutoloader() das vernünftige Abarbeiten des SPL Stacks?
__________________
MM Newmedia | MeinBlog

Geändert von ezkimo (26-01-2009 um 20:07 Uhr)
Mit Zitat antworten