• 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]);//这就是依赖注入
  • 相关阅读:
    使用contentProvider
    创建Sqlite数据库(一)
    AIDL实现进程间通信
    Messenger实现进程间通信(IPC)
    Serializable使用
    Parcelable使用(二)
    STAR法则
    Python系列-------基本语法
    前端随心记---------面试题集
    前端随心记---------惟客科技面试
  • 原文地址:https://www.cnblogs.com/godehi/p/13087117.html
Copyright © 2020-2023  润新知