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

PHP依赖注入与容器

作者: 最底层的技术渣 | 来源:发表于2020-01-29 21:49 被阅读0次

    前言:

    说这个话题之前先讲一个比较高端的思想--'依赖倒置原则'
    "依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高。而依赖倒置原则的思想是,上层不应该依赖下层,应依赖接口。意为上层代码定义接口,下层代码实现该接口,从而使得下层依赖于上层接口,降低耦合度,提高系统弹性",
    我对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依赖注入与容器

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