PHP 依赖注入容器

2020-11-13_5fae3e971d521.png

介绍

使用 PHP 的反射类 ReflectionClass,创建容器方便管理依赖注入。

代码

<?php
interface GrowthInterface
{
    public function evolve();
}

class Agumon implements GrowthInterface
{
    public function evolve()
    {
        echo "亚古兽进化\n";
    }
}

class Gabumon implements GrowthInterface
{
    public function evolve()
    {
        echo "加布兽进化\n";
    }
}

class DigitalBaby
{
    public $growth;
    
    public function __construct(GrowthInterface $growth)
    {
        $this->growth = $growth;
    }
}

class DigitalWorld
{
    protected $instances = [];
    protected $bind = [];
    
    public function set($digitalBabyName, $digitalBaby)
    {
        if (!class_exists($digitalBaby)) {
            echo '我不知道数码宝贝是什么';
        } else {
            $this->bind[$digitalBabyName] = $digitalBaby;
        }
    }

    public function get($digitalBabyName, $digitalBaby)
    {
        if (isset($this->instances[$digitalBabyName])) {
            return $this->instances[$digitalBabyName];
        }
        if (!isset($this->bind[$digitalBabyName])) {
            echo $digitalBabyName."这只数码宝贝貌似不存在";
        }
        $reflect = new ReflectionClass($this->bind[$digitalBabyName]);
        return $this->instances[$digitalBabyName] = $reflect->newInstanceArgs($digitalBaby);
    }
}

$digitalWorld = new DigitalWorld();
$digitalWorld->set('Agumon','DigitalBaby');
$digitalWorld->set('Gabumon','DigitalBaby');
echo $digitalWorld->get('Agumon',[new Agumon])->growth->evolve();
echo $digitalWorld->get('Gabumon',[new Gabumon])->growth->evolve();

创建 digitalBaby.php,代码如上。

执行

$ php digitalBaby.php
亚古兽进化
加布兽进化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值