• 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 bind($key, Callable $resolver)
        {
            $this->_container[$key] = $resolver;
        }
    
        public function make($classname)
        {
            if (!isset($this->_container[$classname])) throw new Exception('unregister class:' . $classname);
            return $this->_container[$classname]($this);
        }
    }
    
    $container = new DIContainer();
    $container->bind('c', function(){
        return new C;
    });
    
    $container->bind('b', function($container){
        return new B($container->make('c'));
    });
    
    $container->bind('a', function($container){
        return new A($container->make('b'));
    });
    
    $a = $container->make('a');
    $a->sayHello();
    

      结果:

    I am C
    I am B
    I am A
    

      

  • 相关阅读:
    第一阶段冲刺 第三天
    第一阶段冲刺 第二天
    第一阶段冲刺 第一天
    第十周进度表
    第九周进度表
    NABCD需求分析
    典型用户和场景分析
    第一个冲刺周期-第一天
    第十周进度表
    团队电梯演讲视频链接
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13358081.html
Copyright © 2020-2023  润新知