美文网首页
TP5源码:框架执行流程与路由解读(一)

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

作者: 机智的老刘明同志 | 来源:发表于2019-11-01 07:46 被阅读0次

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

    run() 做了哪些工作?:

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

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

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

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

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

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

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

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

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

    第一次调用 第二次调用

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

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

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

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

            ob_start()则是页面静态化

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

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

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

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

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

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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ugbqvctx.html