我正在使用此方法加载类:
spl_autoload_register(function($class) {
require_once 'classes/' . $class . '.php';
});
我仍然在努力理解这些功能。
据我所知,每当我创建一个对象实例时,它都会触发该函数并加载objcet的类。
所以,如果我要这样做:
$myObj = new myObj();
该函数将捕获此变形,并require_once 'classes/myObj.php'
。
如果我创建另一个实例会怎么样?例如:
$myObj1 = new myObj();
$myObj2 = new myObj();
它会触发两次功能吗?或者它注意到它是同一个类,所以它不会两次delcare吗?无论如何,这就是我使用require_once
的原因所以我不会过载。但是,我仍然想知道它究竟做了什么。
还有一件事,为什么当我在做这样的代码时:
echo someOtherClass::getDesc();
该函数仍将此识别为类去除,然后需要文件classes/someOtherClass.php
。为什么会这样?我没有声明一个新对象,事实上,我没有对象是someOtherClass的一个实例。这是否意味着每当我使用对象函数时它会尝试包含该类?或者当我使用静态函数时?或者
提前致谢!
答案 0 :(得分:1)
基本上遇到一个未定义的类时,它将逐个调用自动加载堆栈中注册的函数,在每次调用后检查是否定义了类,如果它停止调用加载器并返回脚本执行。
因此它与require_once实际上是相同的,并且对未声明类的静态方法的调用会触发自动加载。
您可以将自动加载视为异常“未声明的类”处理程序,它可以修复它,以便您的脚本可以继续。