zoukankan      html  css  js  c++  java
  • 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]);//这就是依赖注入
  • 相关阅读:
    Delphi中 StrToIntDef函数的用法:
    Delphi判断文件夹(目录)是否存在,不存在就创建一个,可以一次创建多级目录
    Delphi中Format的字符串格式化使用说明
    linux下可变参数打印
    c++11 thread
    QMessageBox 使用
    Ubuntu虚拟机配置nfs
    test
    Qt 布局时组建不贴边
    QPainter 居中写字
  • 原文地址:https://www.cnblogs.com/godehi/p/13087117.html
Copyright © 2011-2022 走看看