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个静态方法的实现原理基本相同,依次为调用参数分析,反射回调相应方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章