ThinkPHP5
1、入口文件
虚拟主机目录/public/index.php
2、引入启动文件
虚拟主机目录/thinkphp/start.php
3、运行App下面的run方法
虚拟主机目录/thinkphp/library/think/App.php -> run()
4、实例化$request对象
虚拟主机目录/thinkphp/library/think/App.php -> Request::instance();
5、进行路由检测
虚拟主机目录/thinkphp/library/think/App.php -> self::routeCheck($request, $config);
6、执行exec方法
虚拟主机目录/thinkphp/library/think/App.php -> self::exec($dispatch, $config);
7、根据dispatch数组里面的type类型打开相对应的控制器
虚拟主机目录/thinkphp/library/think/App.php -> self::module($result, $config, $convert = null);
8、调用Loader::controller通过反射机制加载控制器对象
虚拟主机目录/thinkphp/library/think/App.php -> Loader::controller(...);
9、调用请求方法invokeMethod($method, $vars = [])
虚拟主机目录/thinkphp/library/think/App.php -> self::invokeMethod(...);
10、调用$response对象中的send方法把数据输出浏览器中
虚拟主机目录/thinkphp/library/think/Response.php -> send();
Swoole Server 四层生命周期
-
程序全局期:
- Server->start 之前创建的对象资源,持续驻留内存,worker共享。
- 全局期代码在 Server 结束时才会释放,reload 无效。
-
进程全局期:
- Server 启动后创建多个进程,它们内存空间独立,非共享内存。
- worker 进程启动后(onWorkerStart)引入的代码在进程存活期有效,reload 会重新加载。
-
会话期:
- 在 onConnect 或 第一次onReceive 时创建,onClose 时销毁。
- 客户端连接后创建的对象会常驻内存,直到此客户端离开才销毁。
-
请求期:
- 在 onReceive/onRequest 收到请求开始,直到发送 Response 返回。
- 请求期创建的对象会在请求完成后销毁,和 fpm 程序中的对象一样。
Laravel
生命周期
-
1.Web 服务器将请求发送到项目的 public/index.php 文件。
-
2.PHP 解释器接收到请求后,解释执行 index.php 文件中的 PHP 代码。此时,由 Componser 包管理器生成的自动加载文件被加载。
-
3.创建Laravel 服务容器实例,引导安装 laravel 组件。
-
4.HTTP 或 Console 内核接收到 HTTP 请求,加载 Laravel 服务提供者,同时,将请求分发给路由器执行。
-
5.路由器将渲染视图文件,并生成响应数据给 Web 服务器。
laravel的重点
- laravel5之前成为IoC(Inversion of Control /ɪnˈvɜːrʒn/)、
- 依赖注入(Dependency Injection /dɪˈpendənsi/ /ɪnˈdʒekʃn/ )
- 反射解决方案 ReflectionClass (/rɪˈflekʃn/ )反射是一种在运行时检查类和方法的能力,递归查找类以及类的依赖。
- 契约即接口interface,接口实际上并不做任何事情,只是类的模版
- 服务提供者providers,注册服务到容器中的
- 框架目录,主要目的是分层:
- 事件监听器、错误处理器、请求验证器
- 队列处理器、路由过滤器、用户认证、缓存和会话驱动
- 设计模式
- 单一职责原则
一个类的边界和职责应当是十分狭窄且集中的 - 开放封闭原则
又称开闭原则,规定代码对扩展是开放的,对修改是封闭的 - 里氏替换原则
规定对象可以被其子类的实例所替换,并且不会影响到程序的正确性 - 接口隔离原则
不应该强制接口的实现依赖于它不使用的方法 - 依赖反转原则
它规定高层次的代码不应该依赖低层级的代码
- 单一职责原则