2010-07-06 5 views
8
nicht laden

Ich spiele mit der SPL-Autoload-Funktion und es scheint, dass etwas Wichtiges fehlt, da ich es momentan nicht zum Laufen bringen kann. Hier ist das Snippet ich bin derzeit mit:Verwenden von spl_autoload() Klasse

// ROOT_DIRECTORY translates to /home/someuser/public_html/subdomains/test 
define('ROOT_DIRECTORY', realpath(dirname(__FILE__))); 
define('INCLUDE_DIRECTORY', ROOT_DIRECTORY . '/includes/classes/'); 
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDE_DIRECTORY); 
spl_autoload_extensions('.class.php, .interface.php, .abstract.php'); 
spl_autoload_register(); 

Als ich echo get_include_path() ich den Weg komme ich zu erwarten:

// Output echo get_include_path(); 
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/ 

Jedoch, wenn ich den Code ausführen ich diese Fehlermeldung:

Fatal error: spl_autoload() [function.spl-autoload]: Class Request could not be loaded in /home/someuser/public_html/subdomains/test/contact.php on line 5

Request.class.php ist definitiv im Verzeichnis/home/someuser/public_html/subdomains/test/includes/classes /.

Was fehlt mir?

+0

@ Yannis Rizos - Das ist in der Tat mein Problem. Machen Sie dies zu einer Antwort, damit ich Ihnen zustimmen und Ihnen die richtige Antwort geben kann. –

Antwort

19

Es gibt einen Kommentar (anonym) auf http://www.php.net/manual/en/function.spl-autoload-register.php#96804, der für Ihr Problem gelten kann: spl_autoload_register() scheint nicht nett mit camelcase zu spielen, und in Ihrem Fall könnte versuchen, request.class.php statt Request zu finden ...

+1

Ich habe diesen Fehler auch gefunden. Sobald ich den Klassennamen in Kleinbuchstaben geändert habe, hat alles gut funktioniert. Weißt du, ob dies als Fehler gemeldet wurde? – AntonioCS

+2

Es sind Fehler offen dafür. Lächerlich, dass es immer noch ein Problem ist. Ich habe das Bug-System durchgesehen und über relevante Bugs abgestimmt. Hier ist ein guter Startpunkt: https://bugs.php.net/bug.php?id=53065. – zombat

+1

Wenn Sie immer noch spl verwenden möchten, können Sie eine Closure verwenden, die die Standardfunktion überlädt, so dass Sie nicht unterkassiert werden: 'spl_autoload_register (function ($ class) \t include $ class. '.php'; }); '- Stimmen Sie Ihre Pfade;) –

0

Der Pfad, in dem die Klasse enthalten sein soll, scheint nicht mit dem Pfad übereinzustimmen, den Sie erwarten. Vergleichen

.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/ 

mit

/home/someuser/public_html/subdomains/test/ 

Der Unterschied ist, dass die Klasse nicht in includes/classes/ ist als SPL erfordert es nur einige Verzeichnisse oben.

0

Ich habe eine ähnliche Fehlermeldung erhalten, aber mein Problem war anders. Meine Fehlermeldung sah aus wie

PHP Fatal error: spl_autoload(): Class Lib\Lib\Regex could not be loaded in /dir1/dir2/lib/regex.php on line 49 

Es stellte sich heraus, dass ich die Lib\ von Lib\Regex innerhalb der Regex Klassendefinition selbst zu entfernen vergessen. Ich hatte etwas wie das Folgende:

namespace Lib; 

class Regex { 

... 

    public static function match($pattern, $str) { 

     $regex = new Lib\Regex($pattern); 

     ... 
    } 
} 
Verwandte Themen