__autoload会影响包含的文件吗?

时间:2012-12-28 04:43:43

标签: php autoload

我有index.php文件,在最顶层我定义__autoload魔术函数。

function __autoload($className) {
   echo "autoloading $className";
   require_once('application/models/'.strtolower($className).'.php');
}

然后,我自动引用__autoload包含的User对象(User.php)。到目前为止,一切正常。 问题是User.php引用了File类

        $obj->numberOfUploads = File::countUploadsByUser($obj->ID);

并且此时抛出错误

  

致命错误:第19行的Z:\ home \ project \ www \ application \ models \ user.php中找不到类'文件'

问题是,我可以看到输出

  

自动加载用户

但看不到任何重新调整文件的内容。因此,看起来,当捕获对File的引用时,根本不会调用__autoload函数。尝试将__autoload函数添加到User.php导致重新声明该函数时出错。

如果之前提出的问题,我很抱歉,我试图谷歌搜索并找不到任何信息。

干杯

1 个答案:

答案 0 :(得分:3)

autoload in the php manual的评论来看,似乎有很多人在定义__autoload两次时遇到过类似的问题。

我建议将spl_autoload_register与匿名函数一起使用以避免多个定义冲突,如该页面的示例1中所示:

// Or, using an anonymous function as of PHP 5.3.0
spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

此外,您不需要使用require_once(只能使用require),因为如果已找到该类,则不会再次调用该处理程序。

尝试在spl_autoload_register文件中使用index.php,如果不起作用,请在User.php中添加一个。{/ p>

祝你好运!