命名空間
ThinkPHP/Library和Application下的目錄名可作為根命名空間
//相當(dāng)于實例化ThinkPHP/Library/Org/Util/Test.class.php
//如果Library下沒找到肯尺,則實例化Application/Org/Util/Test.class.php
$obj = new \Org\Util\Test;
// 必須從根命名空間調(diào)用系統(tǒng)內(nèi)置的類庫或者第三方?jīng)]有使用命名空間的類庫
$class = new \stdClass();
$sxml = new \SimpleXmlElement($xmlstr);
手動加載第三方類庫
// 導(dǎo)入Org類庫包 Library/Org/Util/Date.class.php類庫
import("Org.Util.Date");
// 導(dǎo)入Home模塊下面的 Application/Home/Util/UserUtil.class.php類庫
import("Home.Util.UserUtil");
// 導(dǎo)入當(dāng)前模塊下面的類庫
import("@.Util.Array");
// 導(dǎo)入Vendor類庫包 Library/Vendor/Zend/Server.class.php
import('Vendor.Zend.Server');
//注意风响,如果你的類庫沒有使用命名空間定義的話灭返,實例化的時候需要加上根命名空間巍举,例如:
import('Test.UserTest');$test = new \UserTest();
//import方法是無法導(dǎo)入具有點號的類庫文件的聋袋,因為點號會直接轉(zhuǎn)化成斜線刃跛,例如我們定義了一個名稱為User.Info.class.php 的文件的話蚂蕴,采用:import("Org.User.Info");方式加載的話就會出現(xiàn)錯誤谨设,導(dǎo)致加載的文件不是Org/User.Info.class.php 文件熟掂,而是Org/User/Info.class.php 文件.
//這種情況下,我們可以使用:
import("Org.User#Info");
//特殊指定扎拣,第二個參數(shù)路徑赴肚,第三個參數(shù)指定后綴名
import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");
類庫映射
命名類庫映射相當(dāng)于給類文件定義了一個別名,效率會比命名空間定位更高效二蓝。
例如:
Think\Think::addMap('Think\Log',THINK_PATH.'Think\Log.php');
Think\Think::addMap('Org\Util\Array',THINK_PATH.'Org\Util\Array.php');
//如果你想批量映射可用關(guān)聯(lián)數(shù)組的方式傳參
自動加載的順序
在實際的應(yīng)用類庫加載過程中誉券,往往會涉及到自動加載的優(yōu)先級問題,以Test\MyClass類為例刊愚,自動加載的優(yōu)先順序如下:
判斷是否有注冊了Test\MyClass類庫映射踊跟,如果有則自動加載類庫映射定義的文件;
判斷是否存在Library/Test目錄鸥诽,有則以該目錄為初始目錄加載商玫;
判斷是否有注冊Test根命名空間,有則以注冊的目錄為初始目錄加載衙传;
如果以上都不成立决帖,則以Test為模塊目錄進行初始目錄加載;