前段时间用TP5开发了一个小程序,就熟悉了一下TP5。TP5是TP框架最新的一个版本,与以前的3还是有很大的区别,有人说和laravel比较靠近,其实也还好,每个人都有自己不同的看法,只要是选择一个自己用起来比较顺手的框架就好了。

我在学习一个框架的时候,最开始还是先看一下生命周期,真正了解生命周期之后,才能做到对整个框架整体的把握,在细节方面也能更好的理解。

1:入口文件:

TP5的入口文件在public文件下,是整个程序的入口,当然你也可以把文件移到根目录下,修改一下index.php文件里的应用目录和启动文件目录就好了。

在该文件中,功能很简单就是定义应用目录,然后加载引导文件

2:引导文件

下面我们顺着引导找到了start.php。发现里面引入了base.php,其实base文件也是一个引导文件,里面进行一些变量常量的加载,还有一些机制的注册,比如自动加载机制。

加载系统常量定义;
加载环境变量定义文件;
注册自动加载机制;
注册错误和异常处理机制;
加载惯例配置文件;
执行应用;

3.接着就到了应用类
应用类第一步进行了初始化操作,包括以下部分:

加载应用(公共)配置;
加载扩展配置文件(由extra_config_list定义);
加载应用状态配置;
加载别名定义;
加载行为定义;
加载公共(函数)文件;
注册应用命名空间;
加载扩展函数文件(由extra_file_list定义);
设置默认时区;
加载系统语言包;

4.URL检测
初始化完成后就会对URL进行检测,获取到请求地址信息。

请求URL必须为PATHINFO格式,否则则视为非法URL。

如果环境只支持普通格式则必须为以下格式:

http://serverName/index.php?s=/index/index/hello&val=value

5.路由检测

如果开启路由检测,则优先将URL与路由进行匹配,匹配成功则走路由调度,否则就走默认的分析识别。

开启配置为 url_route_on

6.请求分发

这一步是整个生命周期最重要的环节,也是我们接触最多的环节,URL会根据不同的调度找到的我们的控制器,运行控制器里面的方法,

经过一系列我们的代码处理后,得到结果。

7.响应输出

当我们的控制器处理完毕,return之后,就会有Response类将返回的结果输出到界面客户端,我们可以指定默认的格式,一般是json格式。

8.程序结束

其实当我们的Response类将结果输出的界面时,整个生命周期还并未结束。

到目前我们还没有说到日志,日志一般都是在生命周期完成的时候才会写入,所以,此时的框架任务就是把我们本次生命周期的信息写入日志。

至此,整个生命周期结束。

ThinkPHP 5 生命周期的更多相关文章

  1. thinkphp5.0 生命周期

    1.入口文件 // 应用入口文件 index.php // 定义项目路径 define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件 r ...

  2. thinkphp5的生命周期

    1.入口文件 虚拟主机目录/public/index.php 2.引入启动文件 虚拟主机目录/thinkphp/start.php 3.运行App下面的run方法 虚拟主机目录/thinkphp/li ...

  3. thinkphp5.0生命周期

    本篇内容我们对ThinkPHP5.0的应用请求的生命周期做大致的介绍,以便于开发者了解整个执行流程. 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件. ...

  4. legend---六、php脚本变量的生命周期是怎样的

    legend---六.php脚本变量的生命周期是怎样的 一.总结 一句话总结:应该是脚本结束变量的生命周期就完了 1.外部js找不到元素是怎么回事? 1 function myDailyTaskFin ...

  5. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  6. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  7. C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)

    本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...

  8. UIViewController生命周期-完整版

    一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load   (NSObje ...

  9. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

随机推荐

  1. e3mall商城的归纳总结9之activemq整合spring、redis的缓存

    敬给读者 本节主要给大家说一下activemq整合spring,该如何进行配置,上一节我们说了activemq的搭建和测试(单独测试),想看的可以点击时空隧道前去查看.讲完了之后我们还说一说在项目中使 ...

  2. 是时候扔掉 Postman 了,Apifox 不香吗!

    偶然间发现这款测试工具Apifox,暂时还没有想好该把它叫接口测试工具还是辅助开发工具.但是,给我感觉,就是很好用,而且后面还有很多开发的功能是我很期待的. 根据官方给出的简单描述,它能做的事就是: ...

  3. C# .NET容器的源码

    这里有List<T>的源码http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs

  4. WebStorm下ReactNative代码提示设置

    ReactNative 代码智能提醒  (Webstrom live template) https://github.com/virtoolswebplayer/ReactNative-LiveTe ...

  5. java初探(1)之登录补充

    在登录之后,可能服务器是分布式的,因此不能通过一个本地的session来管理登录信息,导致登录的信息不能传递,即在这台服务器上可以得到用户登录信息,但在那台就得不到.因此,需要设置分布式的sessio ...

  6. ConcurrentHashMap的size方法是线程安全的吗?

    前言 之前在面试的过程中有被问到,ConcurrentHashMap的size方法是线程安全的吗? 这个问题,确实没有答好.这次来根据源码来了解一下,具体是怎么一个实现过程. ConcurrentHa ...

  7. 小程序开发-使用Loading和Toast提示框

    小程序提示框 Loading提示框使用方式 1. 在wxml中作为组件使用 <loading hidden="{{hidden}}"> 加载中... </load ...

  8. Java线程本质

    java当中的线程和操作系统的线程是什么关系? 关于操作系统的线程 linux操作系统的线程控制原语 int pthread create(pthread t *thread, const pthre ...

  9. weekly-contest-205

    weekly-contest-205 1 / 5507. 替换所有的问号 class Solution { public String modifyString(String s) { StringB ...

  10. Medium

    https://www.medium.com 破解阅读限制 https://medium-unlimited.ml/download/