在Zend的加载机制概述
代码示例复制代码代码如下所示:
set_include_path(usvn_lib_dir。path_separator。get_include_path());
require_once'zend / / PHP的装载机自动装弹机;
自动装弹机=美元zend_loader_autoloader::getInstance();
自动装弹机-> registernamespace美元(zend_ );
自动装弹机-> registernamespace美元(usvn_ );
自动装弹机-> registernamespace美元(menus_ );
$配置=新usvn_config_ini(usvn_config_file,usvn_config_section);
过程分析
第一是建立include_path,和include_path是地址,文件寻找当包括在PHP调用
以下是require_once'zend / / PHP的装载机自动装弹机;
在Zend /装载机/ autoloader.php文件,Zend / loader.php读。PHP的定义zend_loader类,其中包含的功能如loadClass,LoadFile,isreadable,文件是否可读或不。
zend_loader_autoloader实例化过程是调用它的构造函数的过程(这是一个单一的模式)
它的构造函数是spl_autoload_register(阵列(__class__,'autoload '));zend_loader_autoloader:加载作为类的自动加载功能。
手术也做了分配_internalautoloader自身_autoload
至于如何加载在它,它将被视为根据一个具体的例子
接下来的zend_loader_autoloader:registernamespace(usvn_ )被调用。这个函数的功能是将价值关键在zend_loader_autoloader内部属性_namespaces usvn_和价值的真实。
当您看到这个函数时,您可以看到代码也可以编写。
自动装弹机-> registernamespace美元(zend_ )-> registernamespace(usvn_ )
也许
为自动装弹机-> registernamespace(array(zend_
好的,现在给usvn_config_ini类
这门课的性质是zend_loader_autoloader:加载(usvn_config_ini )
这个函数的第一步是给getclassautoloaders得到类的AutoLoader,getclassautoloaders,加入namespaceautoloader判断的选择,因为我们很少使用它直接跳。
这里返回的装载机已打印完毕。
复制代码代码如下所示:
阵列({ 0 } zend_loader_autoloader = >对象({ _autoloaders:保护} =阵列({ _defaultautoloader:保护})=阵列({ 0 } = { 1 } = > > zend_loader loadClass)= > { } { _internalautoloader _fallbackautoloader:保护:保护} = >阵列*递归* { _namespaces:保护} = >数组({ zend_ } = > 1 { 1 } = { zendx_ usvn_ } = { } = 1 menus_ > 1){ _namespaceautoloaders:保护}阵列({ _suppressnotfoundwarnings:保护} { _zfpath:保护})= > > = > { 1 })= > _autoload)
事实上,它是建立在前面的_internalautoloader。
这实际上会给zend_loader_autoloader:_autoload(usvn_config_ini )
好了,现在你看到zend_loader_autoloader:_autoload功能
美元的回调=美元-> getdefaultautoloader();
在这里,我们得到默认的Autoloader,事实上看到这类的初始定义默认的自动装弹机是什么,阵列('zend_loader ','loadclass);
以下的自然呼叫call_user_func(美元回调,美元类);即,zend_loader:loadClass(usvn_config_ini )
首先,zend_loader一直要求在AutoLoader.php
其次,我们在zend_loader看:loadClass方法,这种方法的第一步是检查异常并跳过。第二步是把班级分成文件,如usvn / / ini.php配置,然后直接调用自::loadFile($文件,空的,真的);
接下来,看看自己::出现,
首先,_securitycheck看看有类的名称,非法字符,不,它包括文件。文件在这里,当然是相对路径,需要拼接在include_path,记得在include_path成立吗在程序开始时设置!嗯,这usvn_config_ini班读到这里。
看到这里,你应该明白,如果你定义一个类,并与命名空间注册,如usvn,那么你应该在以下include_path创建具有相同名称的文件夹(大写字母必须区分),然后你要介绍文件名的相对路径的_类名做独立阅读。
这里的加载机制完成。