PHP自动加载函数有时不起作用
我对自动加载功能有奇怪的问题。我有以下代码:PHP自动加载函数有时不起作用,php,autoload,Php,Autoload,我对自动加载功能有奇怪的问题。我有以下代码: 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/>";
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 Debug”。最奇怪的是,若我在其他函数或其他地方调用调试类,那个么自动加载工作
为什么不调用自动加载功能?原因可能是什么?项目上没有spl\u自动加载\u寄存器功能。有两种功能。首先,如果使用名称空间,则必须包含正确的名称空间。您可以在
$class
变量上创建var\u dump
,以查看类名是否正确
另一件事是,您应该验证您的路径是否确实正确。也许您应该使用\uuuu DIR\uuuu
或dirname(\uuu file\uuuu)
指定文件的完整路径
函数自动加载($class){
自动加载函数中的“echo:”.$class.“
”;
if(是_文件(uuu DIR_uuu.'/'.$class..php))){
需要_once uuu DIR uuu.'/'.$class..php”;
}
}
也许您应该检查该文件是否存在。没有名称空间我找到了解决方案,这是Smarty模板引擎。没有名称空间,文件存在,因为is_file(“Debug.php”)返回true。有一种奇怪的行为——首先脚本必须调用autoload,若它并没有找到类,则抛出一个错误。但在我的例子中,脚本在没有自动加载功能的情况下抛出错误。。。您是否在调试文件中定义了类?听起来有点愚蠢:D,但有时候解决方案很简单。我发现了到底出了什么问题-Smarty autoload杀死了我的autoload。嗯,好吧。。。如果你有另一个函数,那就是一个问题。
in autoload function: TestClass
file exist
class not exist
Fatal error: Class 'Debug' not found in Z:[my local host path] on line 207
function __autoload($class) {
echo "in autoload function: ".$class."<br/>";
if(is_file(__DIR__.'/'.$class.".php")) {
require_once __DIR__.'/'.$class.".php";
}
}