Laravel 服务容器实例

laravel 框架的启动,类似电脑启动的过程。
bootstrap/app.php 框架启动的引导程序,类似电脑的启动程序。
application 框架的启动先创建服务容器,就好像电脑一样容纳着许多的软件。

laravel重要概念:服务容器、服务、服务提供者。

服务容器

可以理解为我们的电脑,它装载了各种软件。
核心服务 (Kernel)
框架运行所必须的服务会被实例化,好比电脑运行所必须系统软件

而其他服务仅仅是注册到服务容器中,需要时才会被实例化,好比QQ、微信它只是待在硬盘里,不用的时候它是不运行的,但是它们已经被注册到电脑中。

服务提供者

服务是如何注册到服务容器中的呢?是服务提供者(provider)提供的。这相当于软件的安装程序,添加到电脑的注册表中。
rZmqg7Nbr6.png!large

契约

契约的产生,是为了规范,同时也是为了解耦。

这里我们把 laravel 中服务的概念,比作视频播放器。
视频播放器,是个抽象的概念,它基础的功能是播放视频。QQ播放器、暴风播放器…
视频播放器的功能是播放视频文件,实现它基础的功能的要求即是契约

laravel 中 这种包含基础功能的类便是抽象接口类(interface),实现类需要实现它(implements)。契约 = interface + implements

一个服务配合另外的服务,共同完成一个目的,服务与服务之间是独立的,那么这便是低耦合。如果另一个服务需要播放器的功能,那么我所需要的播放器必须implement播放器的interface

服务绑定

服务绑定的概念很好理解。前面讲了服务容器相当于电脑,服务相当于软件,服务提供者相当于软件的安装程序,契约相当于视频播放器必须有播放功能,那么服务绑定就相当于电脑的默认视频播放器

你可以在电脑里安装了N个视频播放器软件,但如果打开一个视频的时候,默认软件决定了用哪个去播放它。

bootstrap/app.php 框架引导程序(电脑开机程序)

//创建服务容器
$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);
// 注册核心服务(电脑系统软件)
// singleton 翻译(单例)由于是核心,所以是共享的
$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,//http锲约
    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 //实现类
);

这三个核心,即分别是app目录下的ConsoleExceptionsHttp三个目录下的Kernel核心文件。
F6qX5EyiEH.png!large

核心的实例化

$app = require_once __DIR__.'/../bootstrap/app.php';
//$app->make();从容器中实例化Kernel核心契约类所绑定的核心实现类
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$app->make 并不会指定实例化哪个实现类。这步相当于电脑要播放一个视频文件,具体打开哪个播放器,要看电脑设置的默认播放器是哪个。

上边代码Illuminate\Contracts\Http\Kernel::class 绑定的是App\Http\Kernel::class ,所以$kernelApp\Http\Kernel.php 这个类。

本作品采用《CC 协议》,转载必须注明作者和本文链接
welcome come back
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
95
粉丝
24
喜欢
156
收藏
348
排名:324
访问:2.9 万
私信
所有博文
社区赞助商