L'utilisation spl_autoload () pas en mesure de charger la classe
-
02-10-2019 - |
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?
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);
...
}
}