Zend_Loader_Autoloader是如何工作的_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Zend_Loader_Autoloader是如何工作的_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2293字,纯文字阅读大概需要4分钟。
内容图文
自动加载的原理是Zend_Application实例了Zend_Loader_Autoloader,使其调用了spl_autoload_register(array(__CLASS__, 'autoload')); 这样如果找不到的类就会调用此对象的autoload方法进行处理。一个名称空间可以有多个加载器,迭代找出符合的自定义加载器后,其余的就不会使用了,一般我们只会针对一个名称空间注册一个自定义加载器或者直接使用默认的加载器。
注册名称空间方式分为两种:
- 只注册了空间的前辍,没有指定任何加载器,注册方法为registerNamespace('空间名称')。
- 注册了空间前辍,并指定了加载器。注册方法为pushAutoloader(加载器,'空间名称')或unshiftAutoloader(加载器,'空间名称')两个方法的区别是push将加载器放到指定空间名称的加载器队列之后,unshift是之前。
当一个类没有找到并要求载入时,其类名交给Zend_Loader_Autoloader::autoload()处理,会经历以下几个过程:
- 用已经注册名称空间前辍和此类名进行对比,找出名称空间指定的加载器。
- 用名称空间注册方式第二种名称前辍和此类名前辍进行对比,找出名称空间指定的加载器。
- 用名称空间注册方式第一种名称前辍和此类名前辍进行对比,如果存在则用Zend的加载器。
- 如果没有任何名称空间前辍和此类相等,而确设置了FallbackAutoloader标志则也使用Zend的加载器,否则不返回任何加载器,此类也就不能被载入了。
- 如果加载器是实现了Zend_Loader_Autoloader_Interface接口的类则将类名传给其autoload方法进行加载,如果加载器是一个函数则将类名当做此函数的参数进行加载。如果加载器是一个数组则用call_user_func回调函数进行加载。
自定义的加载器有以下几种形式:
- 一个实现了Zend_Loader_Autoloader_Interface接口的对象
- 一个函数
- 以回调方式(callback)调用一个对象或类的方法.(回掉函数call_user_func)
$autoloader = Zend_Loader_Autoloader::getInstance(); $myAutoloaderClass = new my_Autoloader(); $autoloader->pushAutoloader($myAutoloaderClass, myNamespace);
$autoloader = Zend_Loader_Autoloader::getInstance(); function myAutoloaderFun(){ //TODO }; $autoloader->pushAutoloader('myAutoloaderFun', myNamespace);
$autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('类名', '方法'), myNamespace);
Zend加载器对象方法是Zend_Loader_Autoloader::_autoload。此方法会用call_user_func调用最终的加载方法如默认为array('Zend_Loader', 'loadClass')对当前对象进行加载。
http://www.bkjia.com/PHPjc/752435.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752435.htmlTechArticle自动加载的原理是Zend_Application实例了Zend_Loader_Autoloader,使其调用了spl_autoload_register(array(__CLASS__, 'autoload')); 这样如果找不到的类就会调用此...
内容总结
以上是互联网集市为您收集整理的Zend_Loader_Autoloader是如何工作的_PHP教程全部内容,希望文章能够帮你解决Zend_Loader_Autoloader是如何工作的_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。