Laravel源码进阶

Laravel源码进阶

  • 版本 laravel5.8

生成服务容器

  • public index.php
php 复制代码
//compose必要操作
require __DIR__.'/../vendor/autoload.php';
//容器文件
$app = require_once __DIR__.'/../bootstrap/app.php';

-bootstrap/app.php

php 复制代码
//初始化容器 构造函数中执行这个几个方法
//$this->registerBaseBindings();
// $this->registerBaseServiceProviders();
//$this->registerCoreContainerAliases();
$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

return $app;
  • 首先加载autoload文件 -> 先new app(就是application 初始化instance方法初始化instance属性 然后registrProvider 使用的是观察者模式 然后传入对象就是会执行register方法 这就是为什么需要register方法 绑定bindings属性 ) singleton就是绑定在bindings属性上
    singleton就是有三种方式调用方式
  • make方法的实现
    kernel = app->make(Illuminate\Contracts\Http\Kernel::class);
    获取实例化对象
  • serviceProvider 分析

    第一种laravel的依赖注入去绑定服务者
    第二种就是自己去创建依赖关系
    bind是绑定
    在路由中使用app("Family")就是可以解析
  • 加载并启动laravelProvider(进入request请求了)(封装用户请求) 加载环境变量 加载配置 加载异常 加载Facades 加载服务提供者
    new static() 延迟加载
  • 封装用户请求 -> 穿过路由和中间件->封装一系列的服务
  • register 用户绑定服务到容器, 先调用provider的register方法,等所有服务都注册完毕再去调用每一个服务的boot方法 register是必须的,boot方法不是必须的
  • 服务提供者延时注册
  • 事件:观察者模式 用来解耦非常的完美
  • 中间件:管道模式,用户请求经过一层一层的中间件,然后执行用户处理逻辑,先走全局,然后web,然后自己的中间件

总结

  • 实现依赖注入,更好的管理类之间的依赖关系,为扩展提供无线的可能,实现了一些高级特性
  • 缺点:加载文件太多,导致速度变慢
  • 声明周期 包含自动加载文件-> 注册基础的bindings -> 注册进出的servicePeovider 只是最基础的-> 绑定重要的接口 ->获取request对象 -> 业务逻辑处理 (加载基本的启动项,路由,异常处理,通过管道模式使用中间件处理业务) -> 返回response
  • 常用的模式 单例模式,观察
相关推荐
林深时见鹿7492 小时前
使用k8s k3s kuboard 部署 php hyperf 框架
php
长城20242 小时前
从词源和输出生成等角度详细解析PHP中常用文件操作类函数
php·文件·函数·文件操作函数
长城20242 小时前
PHP如何使用JpGraph生成3D饼形图?
开发语言·php·jpgraph·3d饼形图
熬夜苦读学习9 小时前
Reactor 反应堆模式
运维·服务器·网络·网络协议·http·智能路由器·php
小森林89 小时前
分享一次Guzzlehttp上传批量图片优化的经历
后端·php
THMAIL10 小时前
大模型0基础开发入门与实践:第11章 进阶:LangChain与外部工具调用
开发语言·langchain·php
分享点1 天前
Laravel 使用阿里云OSS S3 协议文件上传
阿里云·php·laravel
苏琢玉1 天前
订单号老是撞车?我写了个通用 PHP ID 生成器
php·composer
BingoGo1 天前
PHP 测试框架 Pest v4 正式发布 革命性的浏览器测试体验
后端·php
搬码临时工2 天前
通过自定义域名访问内网的web服务和tcp应用:内网ip到局域网外域名访问过程
服务器·tcp/ip·php