美文网首页
PHP 依赖注入容器

PHP 依赖注入容器

作者: Yohann丶blog | 来源:发表于2020-11-23 10:53 被阅读0次
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
亚古兽进化
加布兽进化

相关文章

网友评论

      本文标题:PHP 依赖注入容器

      本文链接:https://www.haomeiwen.com/subject/vrmmiktx.html