Laravel进阶系列笔记--(二)Laravel服务容器

作者: 温新

分类: 【Laravel】

阅读: 1749

时间: 2021-08-10 13:49:16

作者:温新

时间:2021-07-04

hi,我是温新,一名PHPer。

Laravel服务容器是什么

Laravel服务容器是一个用于管理类依赖和执行依赖注入的强大工具。

通过案例理解 管理类依赖和执行依赖注入。为了便于理解,这个案例写有路由文件中。

// web.php
class A
{
    public function __construct()
    {
        echo 'aaaaaaaa';
    }
}

class B
{
    public function __construct()
    {
        echo 'bbbbbbbb';
    }
}

class Person
{
    public $a = null;
    public $b = null;
    public function __construct(A $a, B $b)
    {
        $this->a = $a;
        $this->b = $b;
    }
}

Route::get('test', function(Person $person){
});

在这个案例中,Person依赖于AB,传统的操作就是new然后将实例当做参数传递给Person

在Laravel中可以用更为先进的依赖注入来自动完成,这就解释了Laravel服务容器是一个用于管理类依赖和执行依赖注入的强大工具

绑定容器

服务容器需要配合服务提供者来实用,一个类不基于任何接口,这个类就没有必要绑定到容器。

本篇文章只做一个简单的演示,辅助理解。

由于是在web.php文件中进行演示,那么我们就使用app()助手函数或者App门面来绑定。

测试类

// web.php

class A
{
    public function __construct()
    {
        echo 'aaaaaaaa';
    }
}

class Person
{
    public $a = null;
    public function __construct($a)
    {
        $this->a = $a;
    }
}

简单绑定

bind方法用于简单绑定

// web.php

// 简单绑定
app()->bind('Person', function(){
    return new Person(new A);
});

使用

// 依赖注入方式
Route::get('test', function(Person $person){
});
// 解析方式
Route::get('test', function(){
    resolve('Person');
});

绑定一个单例方式

方法:singleton

app()->singleton('Person', function(){
    return new Person(new A);
});

解析

make方法

Route::get('test', function(){
    app()->make('Person');
});

resolve辅助函数

Route::get('test', function(){
	resolve('Person');
});

关于容器简单的演示就到这里。

我是温新

每天进步一点点,就一点点

请登录后再评论