Zend中自动装载机制的原理是什么

介绍

本篇文章为大家展示了Zend中自动装载机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

代码如下:


set_include_path (USVN_LIB_DIR。PATH_SEPARATOR。get_include_path ());
require_once & # 39; Zend/装载机/Autoloader.php& # 39;;
$自动装卸机=Zend_Loader_Autoloader: getInstance ();
自动装卸机→美元registerNamespace (“Zend_");
自动装卸机→美元registerNamespace (“USVN_");
自动装卸机→美元registerNamespace (“menus_");
$ config=新USVN_Config_Ini (USVN_CONFIG_FILE USVN_CONFIG_SECTION);



<>强过程分析

首先是设置了文件名包含路径就是php中调用包括的时候文件寻找的地址
下面就是require_once & # 39; Zend/装载机/Autoloader.php& # 39;;

在Zend/装载机/Autoloader.php文件内,读入了Zend/加载程序。php,这个php定义了Zend_Loader这个类,这个类包含了loadClass, loadFile, isReadable(文件是否可读)等函数
实例化Zend_Loader_Autoloader的过程就是调用其构造函数(这里是使用了单例模式)的过程

它的构造函数中的spl_autoload_register(数组(__CLASS__进行& # 39;自动装载# 39;));将Zend_Loader_Autoloader:自动装载作为类自动加载函数。
还做了一个操作将_internalAutoloader赋值了自身的_autoload

至于这里面是怎么自动装载的等会根据具体例子查看
接下来调用了Zend_Loader_Autoloader: registerNamespace (“USVN_"),这个函数做的事就只是在Zend_Loader_Autoloader的内部属性_namespaces上挂载一个键为USVN_和值为true的值。

看到这个函数就明白其实代码也可以写成

自动装卸机→美元registerNamespace (“Zend_")→registerNamespace (“USVN_")
或者
自动装卸机→美元registerNamespace(数组(“Zend_",“USVN_"))

好了,现在到调用USVN_Config_Ini类了
这个类自然走的就是Zend_Loader_Autoloader:自动装载(“USVN_Config_Ini")
这个函数第一步会去调用getClassAutoloaders获取这个类的AutoLoader.getClassAutoloaders里面增加了对namespaceAutoloader的选择和判断,由于我们很少使用,直接跳过

这里返回的装载机打印出来是这样的

代码如下:


阵列([0]=比;Zend_Loader_Autoloader对象([_autoloaders保护):=比;数组()[_defaultAutoloader保护):=比;阵列([0]=比;Zend_Loader[1]=比;loadClass) [_fallbackAutoloader保护):=比;[_internalAutoloader:保护]=比;数组*递归* [_namespaces保护):=比;数组([Zend_]=比;1 [ZendX_]=比;1 [USVN_]=比;1 [menus_]=比;1)[_namespaceAutoloaders保护):=比;数组()[_suppressNotFoundWarnings保护):=比;[_zfPath:保护]=祝辞)[1]=比;_autoload)



其实就是前面设置的_internalAutoloader。

这里就会实际调用Zend_Loader_Autoloader: _autoload (“USVN_Config_Ini")
好了,现在就看到了Zend_Loader_Autoloader: _autoload函数

调=这→美元getDefaultAutoloader ();
这里会获取默认的自动装卸机,什么是默认的自动装卸机吗?看这个类初始定义,实际上是数组(& # 39;Zend_Loader& # 39; & # 39; loadclass # 39;);
下面自然就调用的是call_user_func(回调,类)美元;即Zend_Loader: loadClass (“USVN_Config_Ini")

首先Zend_Loader已经在自动装卸机。php中被需要了
其次我们看看Zend_Loader: loadClass方法,这个方法第一步是检查异常,跳过第。二步是将类分隔,拼凑成文件,美元比如USVN/Config/Ini。php、下面就直接调用self:: loadFile(文件美元,零,真的);

接下来查看self:: loadFile,
首先_securityCheck看类名中是否有非法字符,没有,就包括了这个美元文件。这里的文件当美元然是相对路径,需要拼接上文件名记得包含路径是在哪里设置的吗?在程序的一开始就设置了!好了,这里就把USVN_Config_Ini这个类读取进来了。
看到这里你就该明白了,如果你自己定义了一个类,并且注册了名称空间,比如USVN,那么你就应该在include_path下面创建一个同名文件夹(大小写必须区分),然后你要引入的相对的文件路径名就是以类名的_做分隔读入的。

上述内容就是Zend中自动装载机制的原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

Zend中自动装载机制的原理是什么