CodeIgniter源碼分析[1]——框架概覽

CodeIgniter 是一套給 PHP 網(wǎng)站開(kāi)發(fā)者使用的應(yīng)用程序開(kāi)發(fā)框架和工具包嗤谚。 它的目標(biāo)是讓你能夠更快速的開(kāi)發(fā),它提供了日常任務(wù)中所需的大量類庫(kù)藏畅, 以及簡(jiǎn)單的接口和邏輯結(jié)構(gòu)敷硅。這是一個(gè)性能小巧且性能十分出色的框架,本文作為CI源碼分析的開(kāi)篇愉阎,將介紹框架代碼的組織結(jié)構(gòu)绞蹦,應(yīng)用程序的流程圖和從入口文件開(kāi)始源碼的執(zhí)行過(guò)程,為后續(xù)的代碼分析奠定基礎(chǔ)榜旦。

代碼結(jié)構(gòu)

目前CodeInniter的release版本是3.1.x幽七,從官網(wǎng)或者git下載代碼之后主要代碼目錄如下所示,本人閱讀的代碼的具體版本是3.1.8溅呢。



CI框架的主要文件目錄是application和system澡屡,當(dāng)然還有user_guide目錄猿挚。
application目錄顧名思義是應(yīng)用的主目錄,文件夾中包含應(yīng)用相關(guān)配置或擴(kuò)展類的模板驶鹉,開(kāi)發(fā)者使用框架進(jìn)行應(yīng)用開(kāi)發(fā)時(shí)主要在本目錄編寫(xiě)相應(yīng)的配置以及邏輯處理方法绩蜻。
system目錄是框架的系統(tǒng)庫(kù),包括公共函數(shù)室埋,基礎(chǔ)配置項(xiàng)办绝,核心類庫(kù),輔助類庫(kù)姚淆,數(shù)據(jù)庫(kù)等孕蝉,這些文件開(kāi)發(fā)者最好不要擅自修改,它是整個(gè)框架的根基也是做源碼分析需要最先關(guān)注的地方肉盹。

目錄名稱 注釋
core 核心庫(kù)和公共函數(shù)
database DB相關(guān)的工具類
fonts 字體
helpers 輔助函數(shù)
langage 語(yǔ)言提示工具
libraries 實(shí)用類庫(kù)

應(yīng)用程序流程圖

在CodeIngiter的用戶手冊(cè)中給出了如下圖所示的應(yīng)用程序流程圖昔驱,實(shí)際上已經(jīng)比較準(zhǔn)確的描述了CI框架的執(zhí)行過(guò)程,在下一篇分析文章框架啟動(dòng)器CodeIngiter.php的分析中我們也會(huì)從代碼的角度分析框架從請(qǐng)求到頁(yè)面顯示在瀏覽器上的執(zhí)行過(guò)程上忍,現(xiàn)在暫且對(duì)框架有個(gè)初步的認(rèn)識(shí)。


  1. index.php 文件作為前端控制器纳本,初始化運(yùn)行 CodeIgniter 所需的基本資源窍蓝;
  2. Router 檢查 HTTP 請(qǐng)求,以確定如何處理該請(qǐng)求繁成;
  3. 如果存在緩存文件吓笙,將直接輸出到瀏覽器,不用走下面正常的系統(tǒng)流程巾腕;
  4. 在加載應(yīng)用程序控制器之前面睛,對(duì) HTTP 請(qǐng)求以及任何用戶提交的數(shù)據(jù)進(jìn)行安全檢查;
  5. 控制器加載模型尊搬、核心類庫(kù)叁鉴、輔助函數(shù)以及其他所有處理請(qǐng)求所需的資源;
  6. 最后一步佛寿,渲染視圖并發(fā)送至瀏覽器幌墓,如果開(kāi)啟了緩存,視圖被會(huì)先緩存起來(lái)用于 后續(xù)的請(qǐng)求冀泻。

代碼執(zhí)行過(guò)程

和很多MVC框架類似常侣,CI框架的入口腳本也命名為index.php
index.php完成的工作包括設(shè)置框架的執(zhí)行環(huán)境弹渔,具體為development胳施,testingproduction3種肢专,并根據(jù)執(zhí)行環(huán)境設(shè)置PHP的報(bào)警級(jí)別舞肆。
然后分別設(shè)置系統(tǒng)您没,應(yīng)用和視圖文件夾的名稱,并且定位這些文件夾在服務(wù)器的絕對(duì)路徑胆绊,然后定義BASEPATH氨鹏,VIEWPATHAPPPATH3個(gè)常量。
最后压状,引入了真正貫穿CI執(zhí)行過(guò)程的“啟動(dòng)器”文件CodeIgniter.php仆抵。
Tips:在CI框架的其他系統(tǒng)文件的首部我們都會(huì)發(fā)現(xiàn)如下所示的代碼段,這就表示index.php是框架的唯一入口文件种冬,如果用戶試圖繞過(guò)入口文件index.php通過(guò)其他方式訪問(wèn)其他文件會(huì)以錯(cuò)誤的方式跳出框架镣丑。
defined('BASEPATH') OR exit('No direct script access allowed');

從源碼的角度看整個(gè)框架的文件調(diào)用過(guò)程如下圖所示。


通過(guò)梳理代碼的執(zhí)行和調(diào)用過(guò)程娱两,我們至少基本了解了CI框架代碼的設(shè)計(jì)莺匠,那么我們接下來(lái)就從啟動(dòng)器CodeIgniter.php開(kāi)始入手分析框架運(yùn)行過(guò)程中核心庫(kù)的源代碼。

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末十兢,一起剝皮案震驚了整個(gè)濱河市趣竣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旱物,老刑警劉巖遥缕,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宵呛,居然都是意外死亡单匣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宝穗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)户秤,“玉大人,你說(shuō)我怎么就攤上這事逮矛〖牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵橱鹏,是天一觀的道長(zhǎng)膜蠢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)莉兰,這世上最難降的妖魔是什么挑围? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮糖荒,結(jié)果婚禮上杉辙,老公的妹妹穿的比我還像新娘。我一直安慰自己捶朵,他們只是感情好蜘矢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布狂男。 她就那樣靜靜地躺著,像睡著了一般品腹。 火紅的嫁衣襯著肌膚如雪岖食。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天舞吭,我揣著相機(jī)與錄音泡垃,去河邊找鬼。 笑死羡鸥,一個(gè)胖子當(dāng)著我的面吹牛蔑穴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惧浴,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼存和,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了衷旅?” 一聲冷哼從身側(cè)響起捐腿,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芜茵,沒(méi)想到半個(gè)月后叙量,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡九串,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寺鸥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猪钮。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胆建,靈堂內(nèi)的尸體忽然破棺而出烤低,到底是詐尸還是另有隱情,我是刑警寧澤笆载,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布扑馁,位于F島的核電站,受9級(jí)特大地震影響凉驻,放射性物質(zhì)發(fā)生泄漏腻要。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一涝登、第九天 我趴在偏房一處隱蔽的房頂上張望雄家。 院中可真熱鬧,春花似錦胀滚、人聲如沸趟济。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顷编。三九已至戚炫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間媳纬,已是汗流浹背双肤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留层宫,地道東北人杨伙。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像萌腿,于是被迫代替她去往敵國(guó)和親限匣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容