為增強phpcms二次開放能力,今天開始讀phpcms源碼,不定期更新點小日志,跟著平哥讀源碼,成為屌絲我看行.
phpcms單入口 mvc架構
index.php 所有請求都必須通過這個文件
index.php
加載base.php框架入口文件,初始化了系統環境變量,定義了pc_base靜態類:
creat_app:初始化了應用程序
load_sys_class:加載系統類,默認加載目錄為libs/classes
load_app_class:加載應用累,默認加載目錄為modules/模塊名/classes目錄(封裝的load_sys_class函數)
load_model:加載數據庫模型,默認加載目錄為model/xxx.class.php
load_sys_func:加載系統函數,默認加載目錄為libs/functions/
調用 pc_base靜態類 creat_app方法
- public static function creat_app() {
- return self::load_sys_class('application');
- }
加載了/libs/classes/application.class.php
pc_base類 里面_load_class方法默認$initialize為1 這樣會在加載的同時實例化 類 并會想實例化對象存儲到$classes靜態數組里面以class的路徑加文件名md5后的key
application類初始化方法:
- public function __construct() {
- $param = pc_base::load_sys_class('param');
- define('ROUTE_M', $param->route_m());
- define('ROUTE_C', $param->route_c());
- define('ROUTE_A', $param->route_a());
- $this->init();
- }
加載了系統類 param 參數處理類
獲取處理一切不受信任的外部變量
定義了 ROUTE_M 獲取的模塊名
定義了 ROUTE_C 獲取的控制器名
定義了 ROUTE_A 獲取的方法名
application里面init方法:
調用application里面load_controller方法
$filepath = PC_PATH.'modules'.DIRECTORY_SEPARATOR.$m.DIRECTORY_SEPARATOR.$filename.'.php';組合控制器路徑
并且判斷有沒有MY_的控制器,靈活擴展控制器
返回控制器實力
call_user_func(array($controller, ROUTE_A));執行控制器里面對應方法.
新聞熱點
疑難解答