PHP依赖注入简单实现

- 1 min

PHP 依赖注入,其意图是将所要依赖的类通过实例的方法注入,从而避免过大的代码量和依赖关系。

Loader

<?php

spl_autoload_register('loadfunc');

function loadfunc($class) {
    $dir = __DIR__;
    $file = $dir . '/' . $class . '.php';
    require $file;
}

依赖注入思想的核心部分

<?php

require_once 'Loader.php';

class Superman {

  protected $module;

  /**
  * 核心是将整个依赖关系插入到当前类中,使依赖成为一个简单的组件存在 
  */
  function __construct(SupermanModuleInterface $module) {
    $this->module = $module;
  }

}

接口

<?php
require_once 'Loader.php';

interface SupermanModuleInterface {

  /**
   * 依赖激活
   * @param  Array  $arr [依赖类名]
   * @return [type]
   */
  public function activate(Array $target);
}

基础动作

<?php
require_once 'Loader.php';

class Laser implements SupermanModuleInterface {
  public function activate(Array $target) {
    $flight = new Flight(999, 100);
    /**
     * 接下来要对target做什么 ...
     */
  }
}

基础实例

<?php

class Flight {
    protected $speed;
    protected $holdtime;
    public function __construct($speed, $holdtime) {}
}
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora