Laravel 框架-服务容器
它是什么:
- 服务容器,从容器两字,我们能想到的就是装东西的器皿
- 加上服务两字,那它就是一个存放各式各样服务的器皿了
- 在程序里面,它就是一个实现 PSR11 标准(依赖注入容器接口)的类,可以绑定各种服务的类
主要作用:
- 实现依赖注入功能,降低实现程序与依赖的耦合。实现的核心方法是
new ReflectionClass()
方法 - 服务绑定,可以简单理解成键值对形式绑定服务
$app['xxService'] = new xxService
。实现过程采用闭包,可以实现按需加载 - 服务解析,可以简单理解成通过键来获取服务
$app['xxService']
。程序中需要某服务时,就可以通过容器来解析服务。基于这个关系,如果项目需要切换某服务,只需要在服务绑定处修改绑定的服务即可
使用示例:
依赖注入:
<?php
namespace App\Http\Controllers;
class WelcomeController extends Controller
{
public function index(\App\ServiceTest\GeneralService $generalService)
{
dd($this->generalService);
}
}
服务绑定:
$app->bind(App\ServiceTest\GeneralService::class, function ($app) {
return new App\ServiceTest\GeneralService();
});
$app->singleton(App\ServiceTest\SingleService::class, function ($app) {
return new App\ServiceTest\SingleService();
});
$instance = new App\ServiceTest\InstanceService();
$app->instance('instanceService', $instance);
服务解析:
$generalServiceOne = $this->app->make(App\ServiceTest\GeneralService::class);
$generalServiceTwo = $this->app[App\ServiceTest\GeneralService::class];
$generalServiceThree = app(App\ServiceTest\GeneralService::class);
$generalServiceFour = \App::make(App\ServiceTest\GeneralService::class);