thinkphp3.2和thinkphp5第三方類庫的載入
3.2的匯入類庫
在3.2中,基本上無需手動載入類庫檔案,你可以很方便的完成自動載入。
系統可以通過類的名稱空間自動定位到類庫檔案,例如:我們定義了一個類 Org\Util\Auth
類:
namespaceOrg\Util;
classAuth{
}
儲存到 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類庫包目錄
│├─OrgOrg類庫包目錄
│├─...更多類庫目錄
Library目錄下面的子目錄都是一個根名稱空間,也就是說以Think、Org為根名稱空間的類都可以自動載入:
手動載入第三方類庫
如果要載入第三方類庫,包括不符合命名規範和字尾的類庫,以及沒有使用名稱空間或者名稱空間和路徑不一致的類庫,或者你就是想手動載入類庫檔案,我們都可以通過手動匯入的方式載入。
我們可以使用import方法匯入任何類庫,用法如下:
// 匯入Org類庫包 Library/Org/Util/Date.class.php類庫
import("Org.Util.Date"
對於import方法,系統會自動識別匯入類庫檔案的位置,ThinkPHP可以自動識別的類庫包包括Think、Org、Com、Behavior和Vendor包,以及Library目錄下面的子目錄,如果你在Library目錄下面建立了一個Test子目錄,並且建立了一個UserTest.class.php類庫,那麼可以這樣匯入:
import('Test.UserTest');
其他的就認為是應用類庫匯入。
注意,如果你的類庫沒有使用名稱空間定義的話,例項化的時候需要加上根名稱空間,例如:
import('Test.UserTest');
$test =new \UserTest();//注意前面的/,因為是全域性的引用
如果你要匯入的類庫檔名的字尾不是class.php而是php,那麼可以使用import方法的第三個引數指定字尾:
import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");
如果你的第三方類庫都放在Vendor目錄下面,並且都以.php為類檔案字尾,也沒用採用名稱空間的話,那麼可以使用系統內建的Vendor函式簡化匯入。例如,我們把 Zend 的 Filter\Dir.php 放到 Vendor 目錄下面,這個時候 Dir 檔案的路徑就是 Vendor\Zend\Filter\Dir.php,我們使用vendor 方法匯入只需要使用:
Vendor('Zend.Filter.Dir');
就可以匯入Dir類庫了。
Vendor方法也可以支援和import方法一樣的基礎路徑和檔名字尾引數,例如:
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
目錄下面,該目錄是官方建議的第三方擴充套件類庫目錄