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");
}