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

1、應用啓動
在/thinkphp/start.php文件中,用一句代碼App::run()->send();實現應用的啓動。
// 執行應用
App::run()->send();
 
run()方法能夠在/thinkphp/library/think/App.php文件中找到對應方法,這個方法是整個框架的核心方法,實現了路由轉換、獲取調度信息、根據調度信息執行相應模塊控制器的方法、獲取方法返回數據、將返回數據賦值給Response對象等一系列操做。
最後,調用返回的Response對象的send()方法將信息返回給客戶端,一次完整的http請求就完成了。
 
2、應用調度分析
其中,第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個靜態方法的實現原理基本相同,依次爲調用參數分析,反射回調相應方法。
相關文章
相關標籤/搜索