• php控制反转 依赖注入例子


    class Superman
    {
         protected $module;
         function __construct(PowerModule $PowerModule,array $arr)
         {
              $this->module = $PowerModule;
              echo "Superman is ready.
    ";
              $this->module->active($arr);
         }
    }
    
    interface PowerModule{
         public function active(array $target);
    }
    
    class XPower implements PowerModule
    {
         protected $long;
    
         public function active(array $target)
         {
              $this->long = $target[0];
              echo "XPower is ready.long is {$this->long}.
    ";
         }
    }
    
    
    class Boom implements PowerModule
    {
         protected $num;
    
         public function active(array $target)
         {
              $this->num = $target[0];
              echo "Boom is ready.num is {$this->num}.
    ";
         }
    }
    
    class Fly implements PowerModule
    {
         protected $speed;
         protected $height;
    
         public function active(array $target)
         {
              $this->num = $target[0];
              $this->speed = $target[0];
              $this->height = $target[1];
              echo "Fly is ready.speed is {$this->speed}.height is {$this->height}.
    ";
         }
    }
    
    class Ioc
    {
         protected $binds;
         protected $instance;
    
         public function bind($abstract,$concrete)
         {
              if ($concrete instanceof Closure)
              {
                   $this->binds[$abstract] = $concrete;
              }
              else
              {
                   $this->instance[$abstract] = $concrete;
              }
         }
    
         public function make($abstract,$params)
         {
              if (isset($this->instance[$abstract])) return $this->instance[$abstract];
              array_unshift($params, $this);
              return call_user_func_array($this->binds[$abstract], $params);
         }
    }
    
    $container = new Ioc();
    $container->bind('superman',function($container,$params){
    return new Superman($Boom,[3]);
    });
    $container->bind('boom',function($container){
    return new Boom();
    });
    
    $container->make('superman','boom');
    
    // $Boom = new Boom();
    // $man = new Superman($Boom,[3]);//这就是依赖注入
  • 相关阅读:
    怎么样通过API函数获取tooltip的内容(请高手帮忙)
    Ajax控件之Accordion控件学习
    C#中结构与类的区别
    C# ref and out 区别
    java 将PDF文件的首页提取为图片
    围住浮动元素(消除浮动)的三种方法
    myeclipse unable to install breakpoint
    C#调用C++编写的COM DLL
    高手教你玩53kf在线客服的指定客服功能
    让IIS支持Flv的详细设置方法
  • 原文地址:https://www.cnblogs.com/godehi/p/13087117.html
Copyright © 2020-2023  润新知