灰太狼 2016-11-19 13:16:05 4273次浏览 0条评论 3 0 0

写个依赖注入的例子,还请各位大牛多多指点:
四个文件:
1(bacend\controllers\SitController.php)框架自带的一个控制器
2 (common\DIClass.php) 依赖注入类 - (依赖注入的实例类必须要实现接口),也就是依赖注入的类型
3 (common\Marks) 接口实现类
4 (common\MarkInterface) 接口

SitController.php (code)

public function actionLogin(){
 //啊,例子就直接写在SiteController的Login方法里吧。。。大家都知道这个
   $quantity = new \common\DIClass($this->_class('makrs'));
   $name = $quantity->getName('小小虾');
   $age = $quantity->getAge(25);
   echo $name."--".$age;die;
}
//一个工厂制造方法,这里可以通过switch case 来返回不同的实例
private function _class($class){
   //switch($class){case 'marks':return new \common\Marks();}
   return new \common\Marks(); //这里带上命名空间是为了让大家明白调用的哪个文件。
}

DIClass.php (code)

<?php

/**
 * 该类是依赖注入类
 */
namespace common;

/**
 * 
 * 类的对象通过外部注入,
 * 注入的对象必须是实现 MarksInterface 接口 类的实例
 * @author zhanghongbo
 */

class DIClass {
    //put your code here
    private $_strategy = null;
    public function __construct(MarksInterface $type) {
        $this->_strategy = $type;
    }
    
    /**
     * 定义接口
     */
    
    public function getName($data){
        return $this->_strategy->getName($data);
    }
    /**
     * 定义接口
     */
    public function getAge($data){
        return $this->_strategy->getAge($data);
    }
}

Marks.php (code)

<?php
namespace common;
/**
 * 定义类实现接口的方法
 *
 * @author 
 */
class Marks implements MarksInterface{
    //put your code here
    
    public function getName($name){
        return "Yii2.0开发者:".$name;
    }
    
    public function getAge($age){
        return "今年已经:".$age."岁了!";
    }
}

MarkInterface.php (code)

<?php
/*
 * 接口
 */
namespace common;
/**
 *
 * @author 
 */
interface MarksInterface {
    //put your code here
    public function getName($data);
    
    public function getAge($data);
}

最终输出结果:
Yii2.0开发者:小小虾--今年已经:25岁了!

    没有找到数据。
您需要登录后才可以评论。登录 | 立即注册