Zend Framework 1.8 Zend_Loader_Autoloader 原理分析.
来源:互联网 发布:linux 自动启动oracle 编辑:程序博客网 时间:2024/06/05 00:56
author: 万壑松风silvester
home: http://hi.baidu.com/ccex
自动加载的原理是Zend_Application实例了Zend_Loader_Autoloader使其调用了spl_autoload_register(array(__CLASS__,'autoload')); 这样如果找不到的类就会调用此对象的autoload方法进行处理.
一个名称空间可以有多个加载器,迭代找出符合的自定义加载器后,其余的就不会使用了,一般我们只会针对一个名称空间注册一个自定义加载器或者直接使用默认的加载器.
注册名称空间方式分为两种.
1.只注册了空间的前辍,没有指定任何加载器,注册方法为registerNamespace('空间名称').
2.注册了空间前辍,并指定了加载器.注册方法为pushAutoloader(加载器,'空间名称')或unshiftAutoloader(加载器,'空间名称')两个方法的区别是push将加载器放到指定空间名称的加载器队列之后,unshift是之前.
当一个类没有找到并要求载入时, 其类名交给Zend_Loader_Autoloader::autoload()处理, 会经历以下几个过程.
1.用已经注册名称空间前辍和此类名进行对比,找出名称空间指定的加载器.
①用名称空间注册方式第二种名称前辍和此类名前辍进行对比,找出名称空间指定的加载器.
②用名称空间注册方式第一种名称前辍和此类名前辍进行对比,如果存在则用Zend的加载器.
③如果没有任何名称空间前辍和此类相等,而确设置了FallbackAutoloader标志则也使用Zend的加载器,否则不返回任何加载器,此类也就不能被载入了.
2.如果加载器是实现了Zend_Loader_Autoloader_Interface接口的类则将类名传给其autoload方法进行加载.如果加载器是一个函数则将类名当做此函数的参数进行加载. 如果加载器是一个数组则用call_user_func回调函数进行加载.自定义的加载器有以下几种形式:
1. 一个实现了Zend_Loader_Autoloader_Interface接口的对象.
2.一个函数,
3.以回掉方式(callback)调用一个对象或类的方法.(回掉函数call_user_func)
Zend加载器对象方法是Zend_Loader_Autoloader::_autoload. 此方法会用call_user_func调用最终的加载方法如默认为array('Zend_Loader', 'loadClass')对当前对象进行加载.
- Zend Framework 1.8 Zend_Loader_Autoloader 原理分析.
- zend framework 1.10升级使用Zend_Loader_Autoloader
- zend framework 1.8 的 Zend_Application 原理分析
- Zend_Loader_Autoloader的运行原理
- zend_loader_autoloader 源码 分析
- zend framework分析总结
- zend framework分析总结
- Zend Framework 2.0 分析
- Zend Framework 2.0 分析
- Zend Framwork Zend_Loader_Autoloader 配置多模块
- zend framework框架分析--缓存
- zend framework框架分析--配置
- zend framework框架分析--缓存
- Zend Framework-Zend_Controller工作原理简介
- Zend Framework—Zend_Controller工作原理简介
- Zend Framework-Zend_Controller工作原理简介
- zend framework 运行原理(2)
- 对zend framework xxe injection 的分析
- JavaScript中escape函数
- 在GridView 中点击某一个按钮在此按钮的下行动态添加一行,再次点击第二次添加的行隐藏
- linux下Apache启动失败的一些体会
- What's new in Python3.0
- codesite使用
- Zend Framework 1.8 Zend_Loader_Autoloader 原理分析.
- 学习web前台页面开发好帮手
- linux配置iptables和squid
- HttpSessionListener 和HttpSessionBindingListener的区别
- 杂想
- 进程与线程
- 对象与类型
- 25匹马,跑道一次可以有5匹马比赛,至少需要多少次比赛,可以计算出前5名
- 宏的一些副作用