首页 php教程 php手册 Zend_Loader_Autoloader是如何工作的

Zend_Loader_Autoloader是如何工作的

Jun 13, 2016 am 09:38 AM

自动加载的原理是Zend_Application实例了Zend_Loader_Autoloader,使其调用了spl_autoload_register(array(__CLASS__, 'autoload')); 这样如果找不到的类就会调用此对象的autoload方法进行处理。

一个名称空间可以有多个加载器,迭代找出符合的自定义加载器后,其余的就不会使用了,一般我们只会针对一个名称空间注册一个自定义加载器或者直接使用默认的加载器。

注册名称空间方式分为两种:

  • 只注册了空间的前辍,没有指定任何加载器,注册方法为registerNamespace('空间名称')。
  • 注册了空间前辍,并指定了加载器。注册方法为pushAutoloader(加载器,'空间名称')或unshiftAutoloader(加载器,'空间名称')两个方法的区别是push将加载器放到指定空间名称的加载器队列之后,unshift是之前。

当一个类没有找到并要求载入时,其类名交给Zend_Loader_Autoloader::autoload()处理,会经历以下几个过程:

  • 用已经注册名称空间前辍和此类名进行对比,找出名称空间指定的加载器。
  1. 用名称空间注册方式第二种名称前辍和此类名前辍进行对比,找出名称空间指定的加载器。
  2. 用名称空间注册方式第一种名称前辍和此类名前辍进行对比,如果存在则用Zend的加载器。
  3. 如果没有任何名称空间前辍和此类相等,而确设置了FallbackAutoloader标志则也使用Zend的加载器,否则不返回任何加载器,此类也就不能被载入了。
  • 如果加载器是实现了Zend_Loader_Autoloader_Interface接口的类则将类名传给其autoload方法进行加载,如果加载器是一个函数则将类名当做此函数的参数进行加载。如果加载器是一个数组则用call_user_func回调函数进行加载。
  • 自定义的加载器有以下几种形式:

    1. 一个实现了Zend_Loader_Autoloader_Interface接口的对象
    2. $autoloader = Zend_Loader_Autoloader::getInstance();
      $myAutoloaderClass = new my_Autoloader();
      $autoloader->pushAutoloader($myAutoloaderClass, myNamespace);
      
      登录后复制
    3. 一个函数
    4. $autoloader = Zend_Loader_Autoloader::getInstance();
      function myAutoloaderFun(){ //TODO };
      $autoloader->pushAutoloader('myAutoloaderFun', myNamespace);
      
      登录后复制
    5. 以回调方式(callback)调用一个对象或类的方法.(回掉函数call_user_func)
    6. $autoloader = Zend_Loader_Autoloader::getInstance();
      $autoloader->pushAutoloader(array('类名', '方法'), myNamespace);
      
      登录后复制

    Zend加载器对象方法是Zend_Loader_Autoloader::_autoload。此方法会用call_user_func调用最终的加载方法如默认为array('Zend_Loader', 'loadClass')对当前对象进行加载。

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)