php设计模式-简单依赖注入容器

<?php
class A 
{
    private $_b;

    public function __construct($b)
    {
        $this->_b = $b;
    }

    public function sayHello()
    {
        $this->_b->sayHello();
        echo 'I am A<br>';
    }
}

class B
{
    private $_c;

    public function __construct($c)
    {
        $this->_c = $c;
    }

    public function sayHello()
    {
        $this->_c->sayHello();
        echo 'I am B<br>';
    }
}

class C
{
    public function sayHello()
    {
        echo 'I am C<br>';
    }
}

// 依赖注入容器
class DIContainer
{
    private $_container;

    public function __set($key, $val)
    {
        $this->_container[$key] = $val;
    }

    public function __get($key)
    {
        return $this->_container[$key]($this);
    }
}

$container = new DIContainer();
$container->c = function(){
    return new C;
};

$container->b = function($container){
    return new B($container->c);
};

$container->a = function($container){
    return new A($container->b);
};

$container->a->sayHello();

  输出结果:

I am C
I am B
I am A

  

posted @ 2020-07-21 22:55  coder_xds  阅读(179)  评论(0编辑  收藏  举报