1

我有 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 导致有关重新声明该函数的错误。

很抱歉,如果之前提出过这个问题,我试图谷歌它并没有找到任何信息。

干杯

4

1 回答 1

3

php 手册中关于 autoload的评论来看,似乎很多人在定义__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

祝你好运!

于 2012-12-28T05:40:00.240 回答