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]);//这就是依赖注入
  • 相关阅读:
    B. Pasha and Phone
    GCD(关于容斥原理)
    二分乘法
    Lucky7(容斥原理)
    E. Devu and Flowers
    最大公约数最小公倍数
    leetcode每日刷题计划--day55
    Titanic--kaggle竞赛入门-生存预测
    做题记录--day54
    机器学习上机作业1记录 && 相关知识点复习
  • 原文地址:https://www.cnblogs.com/godehi/p/13087117.html
Copyright © 2011-2022 走看看