Frage

Ich spiele mit der SPL Autoload-Funktionalität um und scheinen etwas fehlt wichtig zu sein, wie ich zur Zeit nicht in der Lage bin es zur Arbeit zu kommen. Hier wird das Snippet ich bin derzeit mit:

// 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 tun den Weg ich erwartet hatte:

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

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

Fatal error: spl_autoload () [function.spl-Autoload]: Klasse Antrag konnte nicht geladen werden in /home/someuser/public_html/subdomains/test/contact.php Linie 5

Request.class.php ist auf jeden Fall in / home / someuser / public_html / Subdomains / Test / includes / classes / Verzeichnis.

Was bin ich?

War es hilfreich?

Lösung

Es gibt einen Kommentar (anonym) auf http: //www.php.net/manual/en/function.spl-autoload-register.php#96804 dass können, um Ihr Problem anwenden: spl_autoload_register () scheint nicht schön mit Camelcase zu spielen, und in Ihrem Fall könnte versuchen request.class.php statt Anfrage zu finden ...

Andere Tipps

Der Pfad, in dem die Klasse sollte scheint sein, nicht den Weg zu entsprechen wurden Sie 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 aber ein paar Verzeichnisse oben.

Ich habe eine ähnliche Fehlermeldung, 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 vergessen haben, sich die Lib\ von Lib\Regex innerhalb der Regex Klassendefinition zu entfernen. Ich hatte so etwas wie die folgenden:

namespace Lib;

class Regex {

...

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

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

      ...
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top