1. 程式人生 > >thinkphp3.2和thinkphp5第三方類庫的載入

thinkphp3.2和thinkphp5第三方類庫的載入

3.2的匯入類庫

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

系統可以通過類的名稱空間自動定位到類庫檔案,例如: 

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

  1. namespaceOrg\Util;
  2. classAuth{
  3. }

儲存到 ThinkPHP/Library/Org/Util/Auth.class.php

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

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

在例項化Org\Util\Auth類的時候,系統會自動載入 ThinkPHP/Library/Org/Util/Auth.class.php 檔案。

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

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

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


手動載入第三方類庫

如果要載入第三方類庫,包括不符合命名規範和字尾的類庫,以及沒有使用名稱空間或者名稱空間和路徑不一致的類庫,或者你就是想手動載入類庫檔案,我們都可以通過手動匯入的方式載入。

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

  1. // 匯入Org類庫包 Library/Org/Util/Date.class.php類庫
  2. import("Org.Util.Date"
    );

對於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();//注意前面的/,因為是全域性的引用

如果你要匯入的類庫檔名的字尾不是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');

thinkphp5的第三方類庫匯入:

如果你的類庫沒有使用名稱空間,則不支援自動載入,必須使用Loader::import方法先匯入檔案後才能使用。

Loader::import('first.second.Foo');
$foo = new \Foo();
如果使用了名稱空間:

使用first.second.Foo類的時候,直接例項化即可使用,例如:

$foo = new \first\second\Foo();

或者先

use first\second\Foo;

然後

$foo = new Foo();
但是要注意類庫的放置位置,建議使用composer安裝類庫,

直接放入應用根目錄下面的extend目錄下面,該目錄是官方建議的第三方擴充套件類庫目錄