最近在學習CI(3.1.0-dev)框架源碼,一邊看源碼,一邊在github上面寫中文注釋,https://github.com/pandancode/CI-note,有興趣的同學可以看看。
index.php流程:
1、定義開發模式,調試,開發,發布
2、設置system,application等目錄
3、設置默認控制器(不建議在index.php設置)
4、設置用戶配置
5、檢查路徑
6、定義路徑常量
7、加載引導程序 system/core/codeigniter.php
condeigniter.php流程:
1、定義框架版本
2、加載框架定義的常數 system/config/contants.php
3、加載全部函數 system/core/Common.php
4、檢查PHP版本小於5.4,做兼容性處理
5、將PHP超級變量存放在$GLOBALS數組中
6、設置錯誤,異常,腳本退出觸發的函數
7、設置子類前綴
8、如有需要自動加載組件,則加載APPPATH/vendor/autoload.php,或者配置文件里設置的文件路徑
9、加載benchmark,並記錄total_execution_time_start,_base_classes_start兩個時間點
10、加載Hooks,並調用pre_system鈎子
11、加載config類,並初始化實例,根據首頁設置配置,替換配置文件其中項
12、設置默認字符,並加載msstring、iconv擴展
13、檢查mbstring,hash,password,standard類函數是否存在(可能由於版本問題,有些函數在低版本中沒定義),則重新定義實現該函數
14、實例化utf8、uri、router、output類
15、緩存檢查,如果沒有重寫cache輸出,且滿足緩存條件,則直接輸出緩存,退出腳本
16、初始化Security、Input、Lang類
17、加載BASEPATH/core/Controller.php控制器(遲點鋪開講)
18、如果存在子控制器,則加載進來
19、設置_base_classes_end時間點
20、檢查路由接觸出來的class和method是否有效,如果無效,則激活404狀態變量
21、檢查是否重置404,如果重置404,則檢查重置404類和方法是否有效,如果無效,則取消404,
22、如果404為false,第一種情況是本身404一直是未激活,則使用路由解析出來的類和方法,第二種重置了404,但是類或者方法無效,則使用默認的類和方法,否者使用新的類和方法處理404
23、如果方法不是_remap,則獲取參數,Hooks調用pre_controller鈎子
24、記錄controller_execution_time_class_method開始時間,並初始化class
25、Hooks調用post_controller_constructor 鈎子
26、調用class中method,這里會調用相應的controller和方法,方法里面在調用model來處理業務邏輯(遲點鋪開講)
27、BM記錄controller_execution_time_class_method執行結束時間點
28、Hooks調用post_controller鈎子
29、輸出視圖
30、Hooks調用post_system鈎子
媽蛋,流程終於結束了。
