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
总是在链的末尾注册新的自动加载程序