ホームページ 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 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    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 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)