Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php __autoload()帮助和理解_Php - Fatal编程技术网

Php __autoload()帮助和理解

Php __autoload()帮助和理解,php,Php,我正在尝试使用自动加载魔法的方法,但我真的不明白 我是这样用的 function __autoload($class) { require_once("./path/to/classes/".$class.".php"); } 好的,有几个问题。在我的“classes/”文件夹中有5个类文件,我有一个类似这样的命名结构:access.class.php 我注意到的一件事是,由于某种原因,我不能加载超过4个类,我从php错误报告中得到一个错误,没有找到Class:ClassNameHe

我正在尝试使用自动加载魔法的方法,但我真的不明白

我是这样用的

function __autoload($class)
{
     require_once("./path/to/classes/".$class.".php");
}
好的,有几个问题。在我的“classes/”文件夹中有5个类文件,我有一个类似这样的命名结构:access.class.php

我注意到的一件事是,由于某种原因,我不能加载超过4个类,我从php错误报告中得到一个错误,没有找到Class:ClassNameHere之类的内容

所以我调整了一下require_

require_once(strtolower("./path/to/classes/".$class.".class.php"));
很好,但现在我想知道为什么我不能加载超过4个类


我有一个主类和3个扩展该类的其他类。

如果您的“自动加载”工作正常,那么在调用该类之前,您不需要“require”命令一次!它将自动加载

您可以定义一个uu autoload函数,当您试图使用尚未定义的类/接口时,会自动调用该函数。通过调用此函数,脚本引擎可以在PHP出现错误之前加载该类

因此,实际上,当您尝试实例化一个尚未加载的类时,会调用uu autoload函数,并将该类的名称作为参数传递。我建议您尝试使用应用程序中的所有类路径配置阵列。因此,如果您有位于./\u classes/Users.php中的类User,那么您的配置数组将看起来像$CFG['classes']['User']=./\u classes/Users.php;自动加载功能将如下所示:

function __autoload($className){
    global $CFG;
    include_once($CFG['classes'][$className]);
}
更多关于:

您的函数正在查找className.php,但您的文件是className.class.php,因此您必须将其用作:

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

把你的FS结构和你需要的类放在这里,还有自动加载函数real function,和日志中的错误不像这个类名这里我不想为单独的自动加载而烦恼,但只使用spl自动加载寄存器这里对自动加载的类没有限制。您的类和文件名是什么?如果文件系统路径区分大小写,使用strtolower可能会带来问题。例如,我有一个名为access.class.php和authenticate.class.php的类,但当我执行print_r$类时,它会打印出访问权限和身份验证。这是怎么回事?很明显,他需要在那里上课。在这里?作者并没有说他使用了requiredirectly@azat:你没说?为什么这是一个坏主意?有什么论据吗当我只有一小类文件时,我只考虑这个选项,比如说5,它们保存在文件系统的不同部分上。类名必须是这样的,FoBoSlasph.php,位置是Foo/Bar/Simull.php,或者PHP 5.3,与命名空间相同,如果超过100个类使用类数组不是一个好主意,你不这么认为吗?是的,但是如果你有像adodb或smarty这样的类,它们显然必须保存在磁盘上的不同目录中呢?我要做的是生成几个文件路径,并要求如果文件存在,则返回true。模式是关键。您还可以使用spl_autoload_register来注册多个自动加载函数。
function __autoload($class)
{
     require_once("./path/to/classes/".$class.".class.php");
}