0

我正在使用这种方法来加载类:

spl_autoload_register(function($class) {
    require_once 'classes/' . $class . '.php';
});

关于这些功能,我仍然有一些东西我很难理解。

据我了解,每当我创建一个对象实例时,它都会触发该函数并加载该对象的类。

所以,如果我要做类似的事情:

$myObj = new myObj();

该函数将捕获这种减速,并将require_once 'classes/myObj.php'.

如果我创建另一个实例会发生什么?例如:

$myObj1 = new myObj();
$myObj2 = new myObj();

它会触发该功能两次吗?或者它注意到它是同一个类,所以它不会重复两次?无论如何,这就是我使用的原因,require_once所以我不会超载。但是,我仍然想知道它实际上做了什么。

还有一件事,为什么当我在做这样的代码时:

echo someOtherClass::getDesc();

该函数仍将其识别为类声明,然后需要该文件classes/someOtherClass.php。为什么会这样?我还没有声明一个新对象,事实上,我没有对象是 someOtherClass 的一个实例。这是否意味着每当我使用对象函数时,它都会尝试包含该类?或者每当我使用静态函数时?

提前致谢!

4

1 回答 1

1

基本上在遇到未定义的类时,它将在每次调用后一一调用自动加载堆栈中注册的函数,检查该类是否已定义,如果是则停止调用加载程序并返回脚本执行。

因此它实际上与 require_once 相同,并且是调用未声明类的静态方法会触发自动加载。

您可以将自动加载视为异常“未声明的类”处理程序,它旨在修复它,以便您的脚本可以继续。

于 2013-10-22T10:38:08.830 回答