Zend的AutoLoad机制介绍
前端之家收集整理的这篇文章主要介绍了
Zend的AutoLoad机制介绍,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
代码示例 <div class="codetitle"><a style="CURSOR: pointer" data="47095" class="copybut" id="copybut47095" onclick="doCopy('code47095')"> 代码如下:
<div class="codebody" id="code47095">
set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Loader/Autoloader.
PHP';
$autoloader = Zend_Loader
Autoloader::getInstance();
$autoloader->registerNamespace("Zend");
$autoloader->registerNamespace("USVN
");
$autoloader->registerNamespace("menus");
$config = new USVN_Config_Ini(USVN_CONFIG_FILE,USVN_CONFIG_SECTION);
过程分析
首先是设置了include_path,include_path就是
PHP中
调用include的时候
文件寻找的地址
下面就是 require_once 'Zend/Loader/Autoloader.
PHP'; 在Zend/Loader/Autoloader.
PHP文件内,读入了Zend/Loader.
PHP, 这个
PHP定义了Zend_Loader这个类,这个类包含了loadClass,loadFile,isReadable(
文件是否可读)等
函数 实例化Zend_Loader_Autoloader的过程就是
调用其构造
函数(这里是使用了单例模式)的过程 它的构造
函数中的spl_autoload_register(array(
CLASS,'autoload'));将Zend_Loader_Autoloader:autoload作为类
自动加载
函数。
还做了一个操作将_internalAutoloader赋值了自身的_autoload 至于这里面是怎么autoload的等会根据具体例子查看
接下来
调用了Zend_Loader
Autoloader:registerNamespace("USVN"),这个
函数做的事就只是在Zend_Loader_AutoLoader的内部
属性_namespaces上挂载一个key为USVN_和value为true的值。 看到这个
函数就明白其实
代码也可以写成 $autoloader->registerNamespace("Zend
")->registerNamespace("USVN")
或者
$autoloader->registerNamespace(array("Zend
","USVN")) 好了,现在到
调用 USVN_Config_Ini类了
这个类自然走的就是Zend_Loader_Autoloader:autoload("USVN_Config_Ini")
这个
函数第一步会去
调用getClassAutoloaders
获取这个类的AutoLoader。getClassAutoloaders里面
增加了对namespaceAutoloader的选择和判断,由于我们很少使用,直接跳过 这里返回的loader打印出来是这样的
<div class="codetitle">
<a style="CURSOR: pointer" data="38809" class="copybut" id="copybut38809" onclick="doCopy('code38809')"> 代码如下: Array ( [0] => Zend_Loader_Autoloader Object ( [_autoloaders:protected] => Array ( ) [_defaultAutoloader:protected] => Array ( [0] => Zend_Loader [1] => loadClass ) [_fallbackAutoloader:protected] => [_internalAutoloader:protected] => Array
] => 1 [menus_] => 1 ) [_namespaceAutoloaders:protected] => Array ( ) [_suppressNotFoundWarnings:protected] => [_zfPath:protected] => ) [1] => _autoload )