8

我正在使用 SPL 自动加载功能,并且似乎缺少一些重要的东西,因为我目前无法让它工作。这是我目前正在使用的片段:

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

当我echo get_include_path()得到我期望的路径时:

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

但是,当我运行代码时,我收到此错误消息:

致命错误: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肯定在 /home/someuser/public_html/subdomains/test/includes/classes/ 目录中。

我错过了什么?

4

3 回答 3

20

http://www.php.net/manual/en/function.spl-autoload-register.php#96804上有一条评论(匿名)可能适用于您的问题: spl_autoload_register() 似乎不太好使用驼峰式,在您的情况下可能会尝试查找 request.class.php 而不是 Request...

于 2010-07-06T16:07:07.820 回答
0

该类的路径似乎与您期望的路径不匹配。比较

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

/home/someuser/public_html/subdomains/test/

不同之处在于,您的类不在includes/classes/您的 SPL 要求中,而是在上面的几个目录中。

于 2010-07-06T14:57:15.343 回答
0

我收到了类似的错误消息,但我的问题不同。我的错误信息看起来像

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

原来我忘了Lib\Lib\RegexRegex 类定义本身中删除 。我有类似以下内容:

namespace Lib;

class Regex {

...

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

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

      ...
   }
}
于 2015-01-28T05:46:09.337 回答