PHP自动加载函数有时不起作用


PHP autoload function does not work sometimes

我对自动加载函数有一个奇怪的问题。我有这个代码:

function __autoload($class) {
    echo "in autoload function: ".$class."<br/>";
    require_once $class.".php";
}
TestClass::testMethod();
echo is_file("Debug.php") ? " file exist " : "file not exist";
echo "<br/>";
echo  class_exists('Debug') ? "class exist" : "class not exist";
Debug::getIncludeExecutionTime($include, $time);

输出为:

in autoload function: TestClass
file exist
class not exist
Fatal error: Class 'Debug' not found in Z:[my local host path] on line 207

因此,在自动加载函数Debug中出现了错误。最奇怪的是,如果我在其他函数或其他地方调用Debug类,就会自动加载工作。

为什么没有调用自动加载函数?原因是什么?项目中并没有spl_autoload_register函数。

有两件事。首先,如果使用名称空间,则必须包含正确的名称空间。您可以在$class变量上创建一个var_dump,以查看类名是否正确。

另一件事是,你应该验证你的路径是否真的正确。也许您应该使用__DIR__dirname(__FILE__)指定文件的完整路径。

function __autoload($class) {
    echo "in autoload function: ".$class."<br/>";
    if(is_file(__DIR__.'/'.$class.".php")) {
        require_once __DIR__.'/'.$class.".php";
    }
}

也许您应该检查一下该文件是否存在。