PHP依赖注入与容器

前言:

说这个话题之前先讲一个比较高端的思想--'依赖倒置原则'
"依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高。而依赖倒置原则的思想是,上层不应该依赖下层,应依赖接口。意为上层代码定义接口,下层代码实现该接口,从而使得下层依赖于上层接口,降低耦合度,提高系统弹性",
我对DI(依赖注入)的观点一向是,与其说依赖注入,不如说是依赖管理,其实有些类似于composer、pip、maven这种更高一层管理应用与库之间的依赖工具,DI框架会带来这些好处(前提是好的DI框架)

栗子:

class Human
{
    public function eat()
    {
        echo "eat";
    }
}

class Man
{
    protected $human;

    /**
     * 依赖注入
     * Man constructor.
     * @param $human
     */
    public function __construct($human)
    {
        $this->human = $human;
    }

    public function sex()
    {
        $this->human->eat();
        echo "man";
    }
}

/**
 * 容器
 * Class Container
 */
class Container
{
    static $class = [];

    public static function bind($className, Closure $closure)
    {
        self::$class[$className] = $closure;
    }

    public static function make($className)
    {
        $closure = self::$class[$className];
        return $closure();
    }
}

Container::bind('human', function () {
    return new Human();
});
Container::bind("man", function () {
    $human = Container::make('human');
    return new Man($human);
});
$man = Container::make("man");
$man->sex();

后话

上述只是简单的栗子,在生产阶段不建议使用上述代码

你可能感兴趣的:(PHP依赖注入与容器)