ThinkPHP5.0源碼學習之執行應用

一、應用啓動
在/thinkphp/start.php文件中,用一句代碼App::run()->send();實現應用的啓動。
// 執行應用
App::run()->send();
 
run()方法可以在/thinkphp/library/think/App.php文件中找到對應方法,這個方法是整個框架的核心方法,實現了路由轉換、獲取調度信息、根據調度信息執行相應模塊控制器的方法、獲取方法返回數據、將返回數據賦值給Response對象等一系列操作。
最後,調用返回的Response對象的send()方法將信息返回給客戶端,一次完整的http請求就完成了。
 
二、應用調度分析
其中,第12~18步的路由分析和應用調度是框架從底層到應用跳轉的核心部分,對URL進行路有分析,獲取URL可以使用的調度類型,再根據調度類型,分別調用應用的對應邏輯業務實現。
第18步應用調度 $data = self::exec($dispatch, $config); 的源代碼(thinkphp/library/think/App::exec())如下:
$dispatch['type']是App::run()中經過self::routeCheck()、Request::dispatch()後得到的。
 
$dispatch['type']爲redirect時,執行重定向跳轉Response::create();
$dispatch['type’]爲module時,調用self::module();
$dispatch['type']爲controller時,調用自動加載器Loader::action();
$dispatch['type']爲method時,調用self::invokeMethod();
$dispatch['type']爲function時,調用self::invokeFunction();
$dispatch['type']爲response時,獲取$dispatch['response'];
超出以上調度類型,直接拋出異常報錯。
 
6種調度類型中,除redirect、controller、response,其餘3種調度類型都是調用的App內的靜態方法:
moudule——self::module()
method——self::invokeMethod()
function——self::invokeFunction()
3個靜態方法的實現原理基本相同,依次爲調用參數分析,反射回調相應方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章