日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自动加载类库

發布時間:2024/6/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动加载类库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在3.2中,基本上無需手動加載類庫文件,你可以很方便的完成自動加載。

命名空間自動加載

系統可以通過類的命名空間自動定位到類庫文件,例如:

我們定義了一個類 Org\Util\Auth 類:

namespace Org\Util;class Auth {}

?

保存到 ThinkPHP/Library/Org/Util/Auth.class.php。

接下來,我們就可以直接實例化了。

new \Org\Util\Auth();

?

在實例化Org\Util\Auth類的時候,系統會自動加載 ThinkPHP/Library/Org/Util/Auth.class.php 文件。

框架的Library目錄下面的命名空間都可以自動識別和定位,例如:

├─Library 框架類庫目錄│ ├─Think 核心Think類庫包目錄│ ├─Org Org類庫包目錄│ ├─ ... 更多類庫目錄

?

Library目錄下面的子目錄都是一個根命名空間,也就是說以Think、Org為根命名空間的類都可以自動加載:

new Think\Cache\Driver\File();new Org\Util\Auth();new Org\Io\File();

?

都可以自動加載對應的類庫文件。

你可以在Library目錄下面任意增加新的目錄,就會自動注冊成為一個新的根命名空間。

注冊新的命名空間

除了Library目錄下面的命名空間之外,我們還可以注冊其他的根命名空間,例如:

'AUTOLOAD_NAMESPACE' => array('My' => THINK_PATH.'My','One' => THINK_PATH.'One',)

?

配置了上面的AUTOLOAD_NAMESPACE后,如果我們實例化下面的類庫

new My\Net\IpLocation();new One\Util\Log();

?

會自動加載對應的類庫文件

1 ThinkPHP/My/Net/IpLocation.class.php 2 ThinkPHP/One/Util/Log.class.php

?

如果命名空間不在Library目錄下面,并且沒有定義對應的AUTOLOAD_NAMESPACE參數的話,則會當作模塊的命名空間進行自動加載,例如:

1 new Home\Model\UserModel(); 2 new Home\Event\UserEvent();

?

由于ThinkPHP/Library目錄下面不存在Home目錄,也沒在AUTOLOAD_NAMESPACE參數定義Home命名空間,所以就把Home當成模塊命名空間來識別,所以會自動加載:

1 Application/Home/Model/UserModel.class.php 2 Application/Home/Event/UserEvent.class.php

?

注意:命名空間的大小寫需要和目錄名的大小寫對應,否則可能會自動加載失敗。

類庫映射

遵循我們上面的命名空間定義規范的話,基本上可以完成類庫的自動加載了,但是如果定義了較多的命名空間的話,效率會有所下降,所以,我們可以給常用的類庫定義類庫映射。命名類庫映射相當于給類文件定義了一個別名,效率會比命名空間定位更高效,例如:

1 Think\Think::addMap('Think\Log',THINK_PATH.'Think\Log.php'); 2 Think\Think::addMap('Org\Util\Array',THINK_PATH.'Org\Util\Array.php');

?

也可以利用addMap方法批量導入類庫映射定義,例如:

1 $map = array('Think\Log'=>THINK_PATH.'Think\Log.php','Org\Util\Array'=>THINK_PATH.'Org\Util\Array.php'); 2 Think\Think::addMap($map);

?

當然,比較方便的方式是我們可以在模塊配置目錄下面創建alias.php文件用于定義類庫映射,該文件會自動加載,定義方式如下:

1 return array( 2 'Think\Log' => THINK_PATH.'Think\Log.php', 3 'Org\Util\Array' => THINK_PATH.'Org\Util\Array.php' 4 );

?

自動加載的優先級

在實際的應用類庫加載過程中,往往會涉及到自動加載的優先級問題,以Test\MyClass類為例,自動加載的優先順序如下:

  • 判斷是否有注冊了Test\MyClass類庫映射,如果有則自動加載類庫映射定義的文件;
  • 判斷是否存在Library/Test目錄,有則以該目錄為初始目錄加載;
  • 判斷是否有注冊Test根命名空間,有則以注冊的目錄為初始目錄加載;
  • 如果以上都不成立,則以Test為模塊目錄進行初始目錄加載;
  • 以上面獲取到的初始目錄加載命名空間對應路徑的文件;

    手動加載第三方類庫

    如果要加載第三方類庫,包括不符合命名規范和后綴的類庫,以及沒有使用命名空間或者命名空間和路徑不一致的類庫,或者你就是想手動加載類庫文件,我們都可以通過手動導入的方式加載。

    我們可以使用import方法導入任何類庫,用法如下:

    1 // 導入Org類庫包 Library/Org/Util/Date.class.php類庫 2 import("Org.Util.Date"); 3 // 導入Home模塊下面的 Application/Home/Util/UserUtil.class.php類庫 4 import("Home.Util.UserUtil"); 5 // 導入當前模塊下面的類庫 6 import("@.Util.Array"); 7 // 導入Vendor類庫包 Library/Vendor/Zend/Server.class.php 8 import('Vendor.Zend.Server');

    ?

    對于import方法,系統會自動識別導入類庫文件的位置,ThinkPHP可以自動識別的類庫包包括Think、Org、Com、 Behavior和Vendor包,以及Library目錄下面的子目錄,如果你在Library目錄下面創建了一個Test子目錄,并且創建了一個 UserTest.class.php類庫,那么可以這樣導入:

    1 import('Test.UserTest');

    ?

    其他的就認為是應用類庫導入。

    注意,如果你的類庫沒有使用命名空間定義的話,實例化的時候需要加上根命名空間,例如:

    1 import('Test.UserTest'); 2 $test = new \UserTest();

    ?

    按照系統的規則,import方法是無法導入具有點號的類庫文件的,因為點號會直接轉化成斜線,例如我們定義了一個名稱為User.Info.class.php 的文件的話,采用:

    1 import("Org.User.Info");

    ?

    方式加載的話就會出現錯誤,導致加載的文件不是Org/User.Info.class.php 文件,而是Org/User/Info.class.php 文件,這種情況下,我們可以使用:

    1 import("Org.User#Info");

    ?

    來導入。

    大多數情況下,import方法都能夠自動識別導入類庫文件的位置,如果是特殊情況的導入,需要指定import方法的第二個參數作為起始導入路徑。例如,要導入當前文件所在目錄下面的 RBAC/AccessDecisionManager.class.php 文件,可以使用:

    1 import("RBAC.AccessDecisionManager",dirname(__FILE__));

    ?

    如果你要導入的類庫文件名的后綴不是class.php而是php,那么可以使用import方法的第三個參數指定后綴:

    1 import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");

    ?

    注意:在Unix或者Linux主機下面是區別大小寫的,所以在使用import方法的時候要注意目錄名和類庫名稱的大小寫,否則會導入失敗。

    如果你的第三方類庫都放在Vendor目錄下面,并且都以.php為類文件后綴,也沒用采用命名空間的話,那么可以使用系統內置的Vendor函數簡化導入。 例如,我們把 Zend 的 Filter\Dir.php 放到 Vendor 目錄下面,這個時候 Dir 文件的路徑就是 Vendor\Zend\Filter\Dir.php,我們使用vendor 方法導入只需要使用:

    1 Vendor('Zend.Filter.Dir');

    ?

    就可以導入Dir類庫了。

    Vendor方法也可以支持和import方法一樣的基礎路徑和文件名后綴參數,例如:

    1 Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');

    ?

    轉載于:https://www.cnblogs.com/wfyy/p/4478645.html

    總結

    以上是生活随笔為你收集整理的自动加载类库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩电影精品 | 高清国产在线 | 久久av无码精品人妻出轨 | 欧美不在线 | 国外亚洲成av人片在线观看 | 日韩欧美视频在线免费观看 | 国产香蕉网 | 又黄又爽一区二区三区 | 一级黄色欧美 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 免费国产黄色 | 色鬼久久 | 无码一区二区三区视频 | 日本三级欧美三级 | 色悠悠在线视频 | 黄色一级大片在线免费看国产一 | 国产aⅴ精品一区二区果冻 台湾性生生活1 | 久久婷婷影院 | 免费无码肉片在线观看 | 他趴在我两腿中间添得好爽在线看 | 人妖粗暴刺激videos呻吟 | 国产xxxx性hd极品 | 国产精品久久久久久久久免费看 | 亚洲美女av在线 | 国产精品视频一区二区三区 | 国产在线免费 | 亚洲欧洲日韩国产 | 亚洲高清欧美 | 日本一区二区精品 | 无码国产69精品久久久久网站 | 人成在线免费视频 | 美国一区二区三区 | 国产一在线观看 | 日本在线资源 | 亚洲国产中文在线 | www天堂在线| 国产精品一品二区三区的使用体验 | 先锋av资源站 | av免费网站在线观看 | 日韩三级久久 | 污污网址在线观看 | 羞辱狗奴的句子有哪些 | 91麻豆一区二区三区 | 午夜爽爽爽视频 | 日本四虎影院 | 麻豆精品国产 | 国语对白做受xxxxx在线中国 | 一个人免费在线观看视频 | 小镇姑娘高清播放视频 | 国产做爰视频免费播放 | 影音先锋啪啪 | 欧美一区二区高清视频 | 小毛片网站 | 日韩专区中文字幕 | 日本亚洲欧美在线 | 国产三级精品在线观看 | 日韩视频一二三区 | av影院在线观看 | 一级黄色性片 | 毛片3 | 国产性xxx| 一本大道伊人av久久综合 | 在线一区二区三区四区 | 日本熟妇成熟毛茸茸 | 亚洲av永久无码精品国产精品 | 日日碰狠狠添天天爽无码 | 96视频在线 | 亚洲欧美日韩一区二区三区在线观看 | 欧美特级黄色大片 | 国产一区二区免费视频 | 成人手机在线播放 | 自拍偷拍亚洲欧洲 | 99热黄色 | 97免费观看视频 | 国产一卡二卡在线 | 麻豆一区二区在线观看 | www日韩av | 欧美男女动态图 | 九热这里只有精品 | 成人在线免费观看视频 | 久久视频热 | 成人黄色性视频 | 动漫av网| 99精品无码一区二区 | 影音先锋在线视频观看 | xxxx久久 | 超薄肉色丝袜一区二区 | 青青插 | 亚洲91网站 | 国产91精品久久久久久久网曝门 | 在线看av的网址 | 亚洲精品乱码久久久久久日本蜜臀 | 欧美日韩在线免费看 | 国产精品资源站 | 国产人妖ts重口系列网站观看 | 91桃色网站| 玖玖玖精品 | 日日夜夜操视频 | 亚洲AV无码久久精品国产一区 |