真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Thinkphp源碼分析之類(lèi)的自動(dòng)加載

在核心類(lèi)文件Think.class.php里,Think定義了autoload方法,并用spl_autoload_register注冊(cè)為自動(dòng)加載的方法。下面來(lái)解說(shuō)下該方法的原理。

目前創(chuàng)新互聯(lián)建站已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、橋東網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

ThinkPHP的自動(dòng)加載分三種情況:

1.map映射

Think類(lèi)里定義了$_map屬性,用來(lái)保存用戶(hù)添加的類(lèi)映射信息

方法addMap和getMap分別用于添加和獲取映射信息。如果$_map里存在$class的映射,則直接引入class,

// 檢查是否存在映射
if(isset(self::$_map[$class])) {
include self::$_map[$class];
}

2.命名空間下的自動(dòng)加載

首先判斷$class是否含有\(zhòng)\,用以區(qū)分命名空間自動(dòng)加載和非命名空間加載。其結(jié)果無(wú)非獲取一:類(lèi)的basename,二:類(lèi)的dirname。然后拼接類(lèi)的路徑

這里有系統(tǒng)的命名空間和用戶(hù)自定義的命名空間,系統(tǒng)命名空間會(huì)自動(dòng)定位,dirname為L(zhǎng)IB_PATH

$name = strstr($class, '\\', true);
if(in_array($name,array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$name)){ 
// Library目錄下面的命名空間自動(dòng)定位
$path = LIB_PATH;
}

自定義命名空間以模塊為命名空間,dirname為模塊所在的上級(jí)目錄

// 檢測(cè)自定義命名空間 否則就以模塊為命名空間
$namespace = C('AUTOLOAD_NAMESPACE');
$path = isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH;

最后拼接類(lèi)的路徑,引入類(lèi)文件

$filename = $path . str_replace('\\', '/', $class) . EXT;
if(is_file($filename)) {
// Win環(huán)境下面嚴(yán)格區(qū)分大小寫(xiě)
if (IS_WIN && false === strpos(str_replace('/', '\\', realpath($filename)), $class . EXT)){
return ;
}
include $filename;

3.不是用命名空間下的加載

這里分為自動(dòng)加載的類(lèi)庫(kù)層,TP默認(rèn)為Controller和Model下的類(lèi),這兩個(gè)目錄下的類(lèi)文件會(huì)被自動(dòng)加載

還有一個(gè)自定義的自動(dòng)加載的路徑,通過(guò)import方法載入,import方法包含三個(gè)參數(shù):

@param string $class 類(lèi)庫(kù)命名空間字符串@param string $baseUrl 起始路徑 @param string $ext 導(dǎo)入的文件擴(kuò)展名
function import($class, $baseUrl = '', $ext=EXT) {}

這個(gè)方法里包含了加載當(dāng)前模塊,公共模塊,第三方模塊和其他模塊下的類(lèi)的引入。并進(jìn)行了緩存





本文題目:Thinkphp源碼分析之類(lèi)的自動(dòng)加載
URL鏈接:http://weahome.cn/article/gpoeeg.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部