laravel生命周期

php生命周期

php生命周期示意图

  • 运行模式
    • CLI模式
      在终端输入php命令时使用的就是CLI模式
    • WEB模式
      当使用nginx或者其他web服务器作为宿主机处理请求时,使用的就是WEB模式
  • 生命周期
    • 模块初始化:调用php.ini中指明的扩展的初始化函数进行初始化工作,如mysql扩展
    • 请求初始化:初始化脚本中所需要的变量名和变量值内容的符号表,如$_SESSION变量
    • 执行php脚本
    • 请求处理完成:按顺序调用各个模块的request shutdown方法,对每个变量调用unset方法
    • 关闭模块:php调用每个模块的module shutdown方法,这是各个模块最后一次释放内存的机会
  • WEB模式和CLI模式的区别
    • CLI模式会在每次脚本执行经历5个完整的生命周期
    • WEB模式为了应对高并发,可能采用多线程,所以,可能1,5只执行一次,而2~4执行多次,以节省系统模块初始化带来的开销
  • 总结
    理解这些,你就可以优化你的 Laravel 代码,可以更加深入的了解 Laravel 的singleton(单例)。至少你知道了,每一次请求结束,PHP 的变量都会 unset,Laravel 的 singleton 只是在某一次请求过程中的singleton;你在 Laravel 中的静态变量也不能在多个请求之间共享,因为每一次请求结束都会 unset。理解这些概念,是写高质量代码的第一步,也是最关键的一步。因此记住,PHP是一种脚本语言,所有的变量只会在这一次请求中生效,下次请求之时已被重置,而不像Java静态变量拥有全局作用。

laravel生命周期

laravel请求步骤

  • 生命周期

    • 文件载入composer生成的自动加载设置,包括所有你 composer require的依赖。

      1
      require __DIR__.'/../bootstrap/autoload.php';
    • 注册绑定服务,实例化Application,并绑定HttpKernel,ConsoleKernel ,ExceptionHandler

      1
      $app = require_once __DIR__.'/../bootstrap/app.php';
    • 将请求分发到路由,处理请求,生成并发送响应(毫不夸张的说,你99%的代码都运行在这个小小的handle 方法里面)
      但是,请求是如何分发到路由的呢?具体而言就是,请求的分发是通过管道(Pipeline)实现的,而管道中有墙的阻碍。没错,墙就是中间件。
      请求需要首先经过全局中间件的审核,成功后才会分发到路由;分发到路由后,还要经过路由中间件的审核,然后请求才会被路由引导向控制器或闭包函数。
      请求分发到路由

      1
      2
      3
      4
      5
      $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
      $response = $kernel->handle(
      $request = Illuminate\Http\Request::capture()
      );
      $response->send();
    • 请求结束,进行回调(还记得可终止中间件吗?没错,就是在这里回调的)

      1
      $kernel->terminate($request, $response);

阅读本文后,建议阅读laravel框架启动过程

参考:https://www.cnblogs.com/fubuki/p/9695379.html

-------------本文结束  感谢您的阅读-------------