一、php的生命周期(5块)
模块初始化阶段 --- php_module_startup()
请求初始化阶段 --- php_request_startup()
执行脚本阶段 --- php_execute_script()
请求关闭阶段 --- php_request_shutdown()
模块关闭阶段 --- php_module_shutdown()
二、php变量的生命周期
1、PHP使用的回收算法是引用计数法,每个php变量存在一个叫"zval"的变量容器中。
2、一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息。第一个是"is_ref",是个bool值,用来标识这个变量是否是属于引用集合(reference set)。 第二个额外字节是"refcount",用以表示指向这个zval变量容器的变量(也称符号即symbol)个数。
3、把一个变量赋值给另一变量,将增加引用次数(refcount),当任何关联到某个变量容器的变量离开它的作用域(比如:函数执行结束),或者对变量调用了函数unset()时,"refcount"就会减1。
4、变量容器在"refcount"变成0时就被销毁。
Yii2生命周期(10个) | Laravel/Lumen生命周期(5个) |
1.向web/index.php发请求。 2.加载应用配置,创建应用实例。 3.通过请求组件,解析路由请求。 4.创建控制器实例,处理请求。 5.创建动作实例,对操作执行过滤器。 6.若任一过滤器返回失败,则动作取消;若所有过滤器都通过,则动作执行。 7.加载数据模型。 8.渲染一个视图。 9.渲染结果返回给响应组件。 10.响应组件发送渲染结果给用户浏览器。 | 1、向public/index.php发请求。 2、注册类文件自动加载器。 3、创建服务容器:从 bootstrap/app.php 文件中取得 Laravel 应用实例 $app (服务容器)。创建 HTTP / Console 内核:传入的请求会被发送给 HTTP 内核或者 console 内核进行处理 4、载入服务提供者至容器:在内核引导启动的过程中最重要的动作之一就是载入服务提供者到你的应用,服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。 5、分发请求:一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件。 |
三、Yii2生命周期
1.用户向入口脚本 web/index.php 发起请求。
2.入口脚本加载应用配置并创建一个应用 实例去处理请求。
3.应用通过请求组件解析请求的 路由。
4.应用创建一个控制器实例去处理请求。
5.控制器创建一个动作实例并针对操作执行过滤器。
6.如果任何一个过滤器返回失败,则动作取消。
7.如果所有过滤器都通过,动作将被执行。
8.动作会加载一个数据模型,或许是来自数据库。
9.动作会渲染一个视图,把数据模型提供给它。
10.渲染结果返回给响应组件。
11.响应组件发送渲染结果给用户浏览器。
四、Laravel 的生命周期
1、Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。
2、注册类文件自动加载器 : Laravel通过 composer 进行依赖管理,无需开发者手动导入各种类文件,而由自动加载器自行导入。
3、创建服务容器:从 bootstrap/app.php 文件中取得 Laravel 应用实例 $app (服务容器)
创建 HTTP / Console 内核:传入的请求会被发送给 HTTP 内核或者 console 内核进行处理
4、载入服务提供者至容器:在内核引导启动的过程中最重要的动作之一就是载入服务提供者到你的应用,服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。
5、分发请求:一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件
三、ThinkPHP生命周期