Question

Je suis jouer avec la fonctionnalité autoload SPL et semblent manquer quelque chose d'important que je suis actuellement incapable de le faire au travail. Voici l'extrait que je suis actuellement en utilisant:

// 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();

Quand je echo get_include_path() je reçois le chemin que je m'y attendais:

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

Cependant quand je lance le code que je reçois ce message d'erreur:

  

Erreur fatale: spl_autoload () [function.spl-autoload]: Demande de classe n'a pas pu être chargée dans   /home/someuser/public_html/subdomains/test/contact.php   la ligne 5

Request.class.php est définitivement dans le répertoire / home / someuser / public_html / subdomains / test / includes / classes / répertoire.

Qu'est-ce que je manque?

Était-ce utile?

La solution

Il y a un commentaire (anonyme) sur http: //www.php.net/manual/en/function.spl-autoload-register.php#96804 qui peut demander à votre problème: spl_autoload_register () ne semble pas jouer agréable avec camelcase, et dans votre cas pourrait essayer de trouver request.class.php au lieu de la demande ...

Autres conseils

Le chemin où la classe est censé être ne semble pas correspondre au chemin où vous les attendez. Comparer

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

avec

/home/someuser/public_html/subdomains/test/

La différence est que votre classe n'est pas includes/classes/ que votre SPL exige que quelques répertoires ci-dessus.

Je reçu un message d'erreur similaire, mais ma question était différente. Mon message d'erreur ressemblait

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

Il est avéré que j'oublié de retirer le Lib\ de Lib\Regex dans la définition de la classe Regex elle-même. J'avais quelque chose comme ce qui suit:

namespace Lib;

class Regex {

...

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

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

      ...
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top