__autoload()帮助和理解

时间:2011-03-14 09:56:25

标签: php

我正在尝试使用__autoload()魔术方法,但我真的不明白

我正在使用它

function __autoload($class)
{
     require_once("./path/to/classes/".$class.".php");
}

好的,有几个问题。我的'classes /'文件夹中有5个类文件,我有一个这样的命名结构:access.class.php

我注意到的一件事是,由于某种原因,我无法加载超过4个类,我从我的php错误报告中找不到类:ClassNameHere未找到或出现错误。

所以我将require_once调整为

require_once(strtolower("./path/to/classes/".$class.".class.php"));

伟大的可行但现在我回到我想知道为什么我不能加载超过4个类?

我有一个主要类和另外3个扩展该类的主要类。

3 个答案:

答案 0 :(得分:1)

function __autoload($class)
{
     require_once("./path/to/classes/".$class.".php");
}

你的函数正在寻找className.php但你的文件是className.class.php所以你必须使用as:

function __autoload($class)
{
     require_once("./path/to/classes/".$class.".class.php");
}

答案 1 :(得分:0)

如果__autoload()正常工作,则在调用类之前不需要require_once!它将被自动加载。

答案 2 :(得分:-1)

  

您可以定义一个__autoload函数,如果您尝试使用尚未定义的类/接口,则会自动调用该函数。通过调用此函数,在PHP失败并出现错误之前,脚本引擎将获得加载类的最后机会。

因此,实际上,当您尝试实例化尚未加载的类时,将调用__autoload函数并将类的名称作为参数传递。我建议您尝试使用应用中的所有类路径配置数组。因此,如果您说的是位于./_classes/Users.php中的类User,那么您的配置数组看起来就像$ CFG ['classes'] ['User'] =“./_ classes / Users.php”;自动加载功能将如下所示:

function __autoload($className){
    global $CFG;
    include_once($CFG['classes'][$className]);
}

更多讲座:http://php.net/manual/en/language.oop5.autoload.php