ThinkPHP源碼分析之核心類文件的加載-創(chuàng)新互聯(lián)

研究了下TP的加載機(jī)制,以下是我的一些總結(jié):

創(chuàng)新互聯(lián)專注于道外企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),成都做商城網(wǎng)站。道外網(wǎng)站建設(shè)公司,為道外等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

1.首先由應(yīng)用入口文件index.php引入TP入口文件ThinkPHP.php

2.ThinkPHP.php里主要是定義一些系統(tǒng)常量,URL模式定義,系統(tǒng)信息等,然后加載核心類文件Think.class.php,這個(gè)類里定義了start方法,這個(gè)方法是系統(tǒng)加載的核心,ThinkPHP的核心函數(shù)和類文件加載,配置文件加載,字段映射加載,行為擴(kuò)展加載,運(yùn)行時(shí)日志等的生成,模塊目錄的生成等都在這個(gè)方法里有調(diào)用

3.start方法一開始定義注冊了自動(dòng)加載方法,錯(cuò)誤和異常處理的方法

// 注冊AUTOLOAD方法 spl_autoload_register('Think\Think::autoload');  // 設(shè)定錯(cuò)誤和異常處理 register_shutdown_function('Think\Think::fatalError'); set_error_handler('Think\Think::appError'); set_exception_handler('Think\Think::appException');

然后是初始化文件的存儲(chǔ)方式

// 初始化文件存儲(chǔ)方式

Storage::connect(STORAGE_TYPE);這里TP里定義了本地存儲(chǔ)和sae環(huán)境下的存儲(chǔ)類

接著是核心類文件等的加載,TP里根據(jù)APP_MODEL判斷php的應(yīng)用模式,根據(jù)不同的模式加載對應(yīng)的核心文件,默認(rèn)是common模式,如果是api或sae模式,則加載Library/Model下對應(yīng)的核心文件,比如common.php,這里定義了系統(tǒng)要加載的核心配置文件,核心函數(shù),核心類,map映射,行為擴(kuò)展方法等。也就是說TP通過在對應(yīng)的模式文件下提前定義好要加載的核心配置文件等的路徑信息,然后循環(huán)進(jìn)行加載。

// 讀取應(yīng)用模式 $mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';//這里判斷應(yīng)用模式,$model是一個(gè)數(shù)組,定義了配置文件,核心類文件等的路徑 // 加載核心文件 foreach ($mode['core'] as $file){ if(is_file($file)) { include $file; if(!APP_DEBUG) $content .= compile($file);//這里表示運(yùn)行模式下將引入的核心類文件內(nèi)容保存到~runtime.php文件里,這樣后面直接引入~runtime.php文件 } } // 加載應(yīng)用模式配置文件 foreach ($mode['config'] as $key=>$file){ is_numeric($key)?C(load_config($file)):C($key,load_config($file)); } // 讀取當(dāng)前應(yīng)用模式對應(yīng)的配置文件 if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.CONF_EXT)) C(load_config(CONF_PATH.'config_'.APP_MODE.CONF_EXT));  // 加載模式別名定義 if(isset($mode['alias'])){ self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']); } // 加載應(yīng)用別名定義文件 if(is_file(CONF_PATH.'alias.php')) self::addMap(include CONF_PATH.'alias.php'); // 加載模式行為定義 if(isset($mode['tags'])) { Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']); } // 加載應(yīng)用行為定義 if(is_file(CONF_PATH.'tags.php')) // 允許應(yīng)用增加開發(fā)模式配置定義 Hook::import(include CONF_PATH.'tags.php');

4.調(diào)試模式下和非調(diào)試模式下的加載

這里非調(diào)試模式下,在Runtime目錄下會(huì)有一個(gè)~runtime.php的文件,打開會(huì)發(fā)現(xiàn)這個(gè)是經(jīng)過編譯后的源碼文件,里面包含核心配置文件,核心類,map映射等的源碼。也就是說在運(yùn)行模式下,TP會(huì)把加載的核心配置文件,核心類等的內(nèi)容保存到這個(gè)文件里,這樣每次直接調(diào)用~runtime.php文件相當(dāng)于把核心類等直接引入過來,加快了程序運(yùn)行的速度。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁名稱:ThinkPHP源碼分析之核心類文件的加載-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article40/dhehho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、域名注冊、虛擬主機(jī)企業(yè)建站、微信公眾號、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司