理解PHP 依赖注入与容器

Posted 御世制人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解PHP 依赖注入与容器相关的知识,希望对你有一定的参考价值。

<?php

//依赖注入与容器  
class Luntai{
    
    function roll(){
        echo "这是轮胎类::";
    }
}


class Bmw{

    protected $Luntai;
    //注入方式---构造函数注入,还可通过set方式注入
    function __construct($Luntai) {
        $this->Luntai = $Luntai;
    }

    function run() {
        $this->Luntai->roll(); //调用luntai类的 roll方法
        echo "这是宝马的轮胎";
    }
}

//使用方法
/*$luntai = new Luntai();
$bmw = new Bmw($luntai);
$bmw->run();  //这是轮胎类::这是宝马的轮胎
*/



/**
 * 容器
 */
class Container
{
    //存放所要绑定的类
    static $register = [];

    //绑定函数
    //closure 就是个闭包的类型
    static function bind($name, Closure $col) {
        //将键值对存到register中
        //键就是name 值就是col
        self::$register[$name] = $col;
    }

    //创建对象函数
    static function make($name){
        $col = self::$register[$name];
        return $col();
    }
}

//将要实例化的类,绑定到register中去。
//以后用到的时候只需要通过make方法获取即可,不需要再重复实例化 ,类似于redis 键值对
Container::bind(‘luntai‘, function(){
    return new Luntai();
});

Container::bind(‘bmw‘, function(){
    return new Bmw(Container::make(‘luntai‘));
});

$bmw = Container::make(‘bmw‘); //根据键值调用bmw类,并使用其方法
$bmw->run();

 

以上是关于理解PHP 依赖注入与容器的主要内容,如果未能解决你的问题,请参考以下文章

PHP依赖注入,控制反转,反射Ioc容器和服务提供者各个概念的理解和使用

如何理解 PHP的依赖注入(DI) 和 控制反转(IoC)

c#依赖注入和控制反转的书籍

php容器 -- 控制反转 -- 依赖注入

PHP 依赖注入容器实现

PHP中的服务容器与依赖注入的思想