服务提供者案例
1.定义服务:对某个业务进行逻辑封装之后的一个类
<?php namespace App\Services; class TestService { public function __construct() { } public function helloWorld() { echo 'hello world'; } }
2.定义服务提供者:需要将定义好的服务类注册绑定,以便在程序中使用
<?php namespace App\Providers; use App\Services\TestService; use Illuminate\Support\ServiceProvider; class TestServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } public function register() { $this->app->bind('test', function ($app) { return new TestService(); }); } }
3.注册服务提供者到容器:
App\Providers\TestServiceProvider::class,
4.使用我们的服务
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; /** * */ class TestController extends Controller { public function test1() { app('test')->helloWorld(); } }
1.什么是控制反转?以及怎么实现
控制反转:当调用者(A)需要被调用者(B)的协助时,在传统的程序设计过程中,通常由A来创建B的实例,但在这里,创建B的工作不再由A来完成,而是将被调用者的创建移到调用者的外部(IoC容器),从而反转B的创建,消除了A对B创建的控制,因此称为控制反转。
实现方式:将创建B实例的工作交由 IoC 容器(服务容器)来完成,然后在A中注入B(通过构造器/方法注入实现),这样我们就实现了调用者与被调用者的解耦,该过程被称为依赖注入。
2.什么是服务容器?以及它能干什么?
服务容器:通俗的讲就是A需要B的服务,B需要C的服务,这些服务全部在服务容器中完成,统称服务容器
用处:管理类依赖和执行依赖注入
3.什么是服务提供者?以及它干些什么?
服务提供者:继承ServiceProvider的一个类,该类通过register方法,绑定一个服务(也就是业务逻辑类等等)到容器,实现这种功能的角色,称为服务提供者
用法:可以通过
$this->app 变量访问容器,然后使用 bind 方法注册一个绑定

浙公网安备 33010602011771号