灰太狼 2016-11-19 14:37:37 4356次浏览 7条评论 1 0 0

写了一个Yii2.0通用依赖注入接口实现类的结构。
还请大牛指点!

<?php
namespace backend\controllers;
/**
 * Description of Test
 *
 */
use yii\base\Controller;
class TestController extends Controller {
    //put your code here
    /**
     * 依赖注入   
     */
    public function actionDiclass(){
        $class = 'Marks';
//        $class = 'Marks1';    //切换实现类
        $quantity = new \common\DIClass($this->_class($class));
        $name = $quantity->getName('小小虾');
        $age = $quantity->getAge(25);
        echo $name."--".$age;die;
    }
    private function _class($class){
        switch ($class) {
            case 'Marks':
                return new \common\Marks(); 
                break;
            case 'Marks1':
                return new \common\Marks1(); 
                break;
            default:
                break;
        }
    }
}
namespace common;
/**
 * 定义类实现接口的方法
 *
 * @author 
 */
class Marks implements MarksInterface{
    //put your code here
    
    public function getName($name){
        return "Yii2.0开发者333:".$name;
    }
    
    public function getAge($age){
        return "今年已经222:".$age."岁了!";
    }
}

<?php
namespace common;
/**
 * Description of Mark1
 *
 */
class Marks1 implements MarksInterface{
    //put your code here
    
    public function getName($str){
        return "1111";
    }
    
    public function getAge($str){
        return "2222";
    }
}
<?php
/*
 * 接口
 */
namespace common;
/**
 *
 */
interface MarksInterface {
    //put your code here
    public function getName($data);
    
    public function getAge($data);
}

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

  • 评论于 2016-11-21 11:51 举报

    哎呦,还不错哦。

  • 评论于 2016-11-21 19:03 举报

    我到现在不知道依赖注入是啥意思,/尴尬

  • 评论于 2016-11-21 19:03 举报

    我到现在不知道依赖注入是啥意思,/尴尬

  • 评论于 2016-11-28 11:40 举报

    你真搞笑,你这样并没有解耦

    1 条回复
    评论于 2017-01-12 17:58 回复

    牛人,求解

  • 评论于 2016-12-10 13:29 举报

    **_

    不行_**

  • 评论于 2016-12-10 13:29 举报
      • > 这里是列表文本
  • 评论于 2017-01-12 19:02 举报

    有个例子是评论模块评论后发邮件,评论类注入邮件类,那么评论类就有了邮件类的方法,评论在评论类外部调用,发邮件在评论类内部调用( http://www.kancloud.cn/kancloud/yii-in-depth/50793 )。一开始不理解,认为通过配置是最好的,因为牵一发而动全身。但实际是发给奥巴马需要用gmail,而发给习近平需要用qqmail,存在差异化。就是让一切使用起来更像接口,使用者只需要配置,从而让一切变得简洁

您需要登录后才可以评论。登录 | 立即注册