函数spl_autoload_call奇怪的行为

时间:2014-01-13 08:56:25

标签: php autoload

这个简单的代码适用于我的localhost。

function autoLoaderFunction($classname){
    $file = path_to_server_document_root.'classes/'.strtolower($classname).'.php';

      if (file_exists($file) && is_readable($file) && !class_exists($classname, false)){
          require_once($file);
      }else{
          throw new Exception('Class cannot be found ( ' . $classname . ' )');
      }
}
spl_autoload_register('autoLoaderFunction');

将内容上传到服务器时出现问题。所有路径都可以。但我有很多异常错误。这个自动加载功能似乎试图加载所有文件,不仅是类,还有函数,文件名等。有类似的错误: 带有消息'未找到类(language_id)'的未捕获异常'异常' - 其中language_id是url GET参数。 还喜欢: 未捕获的异常'异常',消息'找不到类(function_display_tempalte),其中function_display_tempalte是一个函数名... 当我删除throw new Exception行时,整个网站在服务器上工作正常,所以这个自动加载似乎正确地加载了所有必要的类,还有很多其他不是类的文件 完全不知道这里发生了什么。 任何建议?非常感谢!

1 个答案:

答案 0 :(得分:1)

我猜您的代码正在尝试实例化language_id的对象。这种行为没有其他解释。我会检查自动加载功能中抛出的Exception的堆栈跟踪。

也许以下解决方案也是一个好的开始:

if (file_exists($file) && is_readable($file) && !class_exists($classname, false)){
    require_once($file);
}else{
    if($classname === 'language_id') {
        var_dump(debug_backtrace());
    }
    throw new Exception('Class cannot be found ( ' . $classname . ' )');
}

但是,一旦设置完毕,调试器就可以让您的生活更轻松。