Php 何时调用Yii:autoload($className)?

Php 何时调用Yii:autoload($className)?,php,yii,autoload,Php,Yii,Autoload,我正在寻找\uu autoload类中的YiiBase魔术方法,但它不是。在官方文件中说,公共静态函数autoload($className)是 类自动加载加载程序。提供此方法是为了在 __autoload()魔术方法 我很困惑。哪类yii框架包含\uu autoload魔术方法?有可能得到一个自动加载组件类的示例吗?我认为Yii会在您引用某个类时尝试自动加载该类。Yii只是利用PHP的\uuu autoload()函数。这是一种神奇的方法,就像\uu get()或\uu set() 例如,当您

我正在寻找
\uu autoload
类中的
YiiBase
魔术方法,但它不是。在官方文件中说,
公共静态函数autoload($className)

类自动加载加载程序。提供此方法是为了在 __autoload()魔术方法


我很困惑。哪类
yii
框架包含
\uu autoload
魔术方法?有可能得到一个自动加载组件类的示例吗?

我认为Yii会在您引用某个类时尝试自动加载该类。Yii只是利用PHP的
\uuu autoload()
函数。这是一种神奇的方法,就像
\uu get()
\uu set()

例如,当您编写
$foo=newfoo()时和类
Foo
尚未加载,您将得到一个错误

但是,如果您之前定义了一个
\uuu autoload($classname)
函数,就可以防止这种情况发生。这样,PHP将首先尝试运行
\uuu autoload($classname)
函数,而不是抛出错误。在该函数中,可以执行以下操作:包括变量
$classname
等等

这里有更多信息:

Yii使用该功能设置自动加载器功能。php5.1.2中引入了
spl\u autoload\u寄存器
,使我们可以注册多个自动加载函数。它有效地创建了一个自动加载函数队列,并按照定义的顺序遍历每个函数。相比之下,
\uuu autoload()
只能定义一次。在Yii中,您可以在
YiiBase.php
中找到它,就在
YiiBase
类的定义之后,在文件的最后:

spl_autoload_register(array('YiiBase','autoload'));
其中,
autoload
是在
YiiBase
类中定义的静态方法

使用
spl\u autoload\u register
而不是
\u autoload()
魔术功能对我们很好,因为这样Yii的自动加载器不会与我们自己的或其他第三方的自动加载器冲突。
YiiBase
类还定义了一个函数,用于在链中Yii的自动加载器之前或之后注册另一个自动加载器函数。如果您看一下它的代码,它的功能非常简单:

public static function registerAutoloader($callback, $append=false)
{
    if($append)
    {
        self::$enableIncludePath=false;
        spl_autoload_register($callback);
    }
    else
    {
        spl_autoload_unregister(array('YiiBase','autoload'));
        spl_autoload_register($callback);
        spl_autoload_register(array('YiiBase','autoload'));
    }
}
它实际上只是使用
spl\u autoload\u register
和/或
spl\u autoload\u unregister
(是的,您也可以注销自动加载功能!)将新的自动加载程序放在Yii的自动加载程序之前或之后,因为
spl\u autoload\u register
总是在链的末尾注册新的自动加载程序