代码之家  ›  专栏  ›  技术社区  ›  John Conde

使用spl\u autoload()无法加载类

  •  8
  • John Conde  · 技术社区  · 14 年前

    我在玩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/
    

    /home/someuser/public\u html/subdomains/test/contact.php 第5行

    一定地 在/home/someuser/public\uhtml/subdomains/test/includes/classes/目录中。

    我错过了什么?

    3 回复  |  直到 12 年前
        1
  •  20
  •   yannis    12 年前

    有一个评论(匿名) http://www.php.net/manual/en/function.spl-autoload-register.php#96804 这可能适用于您的问题:spl\u autoload\u register()似乎不能很好地处理camelcase,在您的情况下,可能会尝试查找request.class.php而不是request。。。

        2
  •  0
  •   DrColossos    14 年前

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

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

    具有

    /home/someuser/public_html/subdomains/test/
    

    不同的是,你们班不在 includes/classes/ 因为你的SPL需要它,但上面有几个目录。

        3
  •  0
  •   David Winiecki    10 年前

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

    Lib\ Lib\Regex 在Regex类定义本身内部。我有以下几点:

    namespace Lib;
    
    class Regex {
    
    ...
    
       public static function match($pattern, $str) {
    
          $regex = new Lib\Regex($pattern);
    
          ...
       }
    }