TP5源码:框架执行流程与路由解读(一)

        前面的我们分析了类的自动加载机制,容器类以及facade模式。接下来我们继续研究run方法

run() 做了哪些工作?:

        Container:: get('app')最终将指向了 think\App.php类。仔细观察run方法内部结构,发现run方法主要进行了以下几步操作(ps:太长了,这里不贴代码了,挑几个主要的来记)

1. initialize方法中的初始化应用:

        run()内部首先调用了initialize(),而initialize()的作用就是初始化应用!

        如下图所示  initialize() 主要设置了很多全局变量(当然还有很多额外的操作了。。。)

TP5源码:框架执行流程与路由解读(一)_第1张图片

        initialize()里的init()方法也是起到了初始化的作用。如下图所示,各种加载读取文件。

TP5源码:框架执行流程与路由解读(一)_第2张图片

        不过这里我们需要注意init()会被调用两次,

        第一次自然是在initialize()内部调用了,负责初始化应用 (就是application文件夹)

        第二次就是在路由检测中调用,负责初始化模块(就是应用中的每个小模块,如图中的index模块)

        这里我们可以配置phpStorm的Dbug,也可以使用debug_backtrace(); 这个函数进行监控

第一次调用
TP5源码:框架执行流程与路由解读(一)_第3张图片
第二次调用

2.initialize方法中应用调试模式( )

        读取config/app.php文件中几项配置来决定是否开启关闭调试

        ini_set()直接修改php.ini的内容

        PHP_SAPI内置变量则获取php运行模式(cli:命令行模式,apache2handler:apache环境,cgi-fcgi:nginx)

        ob_start()则是页面静态化

TP5源码:框架执行流程与路由解读(一)_第4张图片

3.initialize方法中路由初始化:

        routeInit()会读取route目录下的所有路由文件(scandir:列出目录中所有的文件和目录),因此只要是在route文件夹下的所有路由文件都会被include

        下图引入了路由文件,并且判断路由文件的返回值,从而进行不同的处理(import方法后面再说,这里主要知道routeInit()的大致作用即可)

TP5源码:框架执行流程与路由解读(一)_第5张图片

        下图是路由文件,通过门面模式找到了facade/route类,并调用其get方法

TP5源码:框架执行流程与路由解读(一)_第6张图片

        打开官方手册,我们可以看到路由的定义如下

TP5源码:框架执行流程与路由解读(一)_第7张图片

        我们可以发现,无论是get() 还是 post() 还是 rule(),其本质都是调用 addRule()

        那么addRule()又进行了哪些操作呢?欲知后事如何,请听下回分解

你可能感兴趣的:(TP5源码:框架执行流程与路由解读(一))