中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
自動(dòng)加載

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

命名空間自動(dòng)加載

系統(tǒng)可以通過類的命名空間自動(dòng)定位到類庫文件,例如:

我們定義了一個(gè)類 Org\Util\Auth 類:

  1. namespace Org\Util;
  2. class Auth {
  3. }

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

接下來,我們就可以直接實(shí)例化了。

  1. new \Org\Util\Auth();

在實(shí)例化Org\Util\Auth類的時(shí)候,系統(tǒng)會(huì)自動(dòng)加載 ThinkPHP/Library/Org/Util/Auth.class.php 文件。

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

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

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

  1. new Think\Cache\Driver\File();
  2. new Org\Util\Auth();
  3. new Org\Io\File();

都可以自動(dòng)加載對應(yīng)的類庫文件。

你可以在Library目錄下面任意增加新的目錄,就會(huì)自動(dòng)注冊成為一個(gè)新的根命名空間。

注冊新的命名空間

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

  1. 'AUTOLOAD_NAMESPACE' => array(
  2. 'My' => THINK_PATH.'My',
  3. 'One' => THINK_PATH.'One',
  4. )

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

  1. new My\Net\IpLocation();
  2. new One\Util\Log();

會(huì)自動(dòng)加載對應(yīng)的類庫文件

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

如果命名空間不在Library目錄下面,并且沒有定義對應(yīng)的AUTOLOAD_NAMESPACE參數(shù)的話,則會(huì)當(dāng)作模塊的命名空間進(jìn)行自動(dòng)加載,例如:

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

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

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

注意:命名空間的大小寫需要和目錄名的大小寫對應(yīng),否則可能會(huì)自動(dòng)加載失敗。

類庫映射

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

  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方法批量導(dǎo)入類庫映射定義,例如:

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

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

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

自動(dòng)加載的優(yōu)先級

在實(shí)際的應(yīng)用類庫加載過程中,往往會(huì)涉及到自動(dòng)加載的優(yōu)先級問題,以Test\MyClass類為例,自動(dòng)加載的優(yōu)先順序如下:

  1. 判斷是否有注冊了Test\MyClass類庫映射,如果有則自動(dòng)加載類庫映射定義的文件;
  2. 判斷是否存在Library/Test目錄,有則以該目錄為初始目錄加載;
  3. 判斷是否有注冊Test根命名空間,有則以注冊的目錄為初始目錄加載;
  4. 如果以上都不成立,則以Test為模塊目錄進(jìn)行初始目錄加載;

以上面獲取到的初始目錄加載命名空間對應(yīng)路徑的文件;

手動(dòng)加載第三方類庫

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

我們可以使用import方法導(dǎo)入任何類庫,用法如下:

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

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

  1. import('Test.UserTest');

其他的就認(rèn)為是應(yīng)用類庫導(dǎo)入。

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

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

按照系統(tǒng)的規(guī)則,import方法是無法導(dǎo)入具有點(diǎn)號的類庫文件的,因?yàn)辄c(diǎn)號會(huì)直接轉(zhuǎn)化成斜線,例如我們定義了一個(gè)名稱為User.Info.class.php 的文件的話,采用:

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

方式加載的話就會(huì)出現(xiàn)錯(cuò)誤,導(dǎo)致加載的文件不是Org/User.Info.class.php 文件,而是Org/User/Info.class.php 文件,這種情況下,我們可以使用:

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

來導(dǎo)入。

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

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

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

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

注意:在Unix或者Linux主機(jī)下面是區(qū)別大小寫的,所以在使用import方法的時(shí)候要注意目錄名和類庫名稱的大小寫,否則會(huì)導(dǎo)入失敗。

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

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

就可以導(dǎo)入Dir類庫了。

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

  1. Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
import函數(shù):類庫導(dǎo)入
命名空間
Thinkphp中import方法用法
Spring OSGi的整合
Unable to load native-hadoop library for your platform Hadoop本地庫與系統(tǒng)版本不一致引起的錯(cuò)誤解決方法
TP5.1中自動(dòng)生成目錄結(jié)構(gòu)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服