<?php
namespace app\controllers;
use Yii;
use yii\di\Container;
use yii\di\ServiceLocator;
use yii\web\Controller;
class DependencyController extends Controller{
    //这个是以容器方式注入
    public function actionIndex(){
        $container = new Container();
        $container->set('app\controllers\Driver','app\controllers\ManDriver');
        $car = $container->get('app\controllers\Car');
        $car->run();
    }
    //用服务器定位器来注入(基于容器注入的)
    public function actionServer(){
        //没有把car配置到web.php配置里
//        \Yii::$container->set('app\controllers\Driver','app\controllers\ManDriver');
//        $s1 = new ServiceLocator();
//        $s1->set('car',[
//            'class'=>'app\controllers\Car',
//        ]);
//        $car  = $s1->get('car');
//        $car->run();

//配置到web.php里
        /**
         * 不用实例ServiceLocator 代码量少了点 他是从应用主体里读这个car 然后调用他里面的方法
        **/
        \Yii::$container->set('app\controllers\Driver','app\controllers\ManDriver');
        \Yii::$app->car->run();
    }
}
interface Driver{
    public function driver();
}
class ManDriver implements Driver{
    public function driver(){
        echo 'a man drivering...<br>';
    }
}

class Car{
    private $driver = null;
    public function __construct(Driver $driver){
        $this->driver = $driver;
    }
    public function run(){
        $this->driver->driver();
    }
}

/**  依赖注入
 * 1.总体思路  创建一个容器,往容器里加注入class 用容器调用class里的方法 over
 * 2.用发上实例说明
 * 3.首先创建一个car 类,为了降低解耦度用了接口(Driver),实现接口driver方法即可。
 * 4.创建一个容器 $container = new Container();
 * 5.往容器里注入类用get方法 $car = $container->get('app\controllers\Car');
 * 6.此时还不能用这个容器,因为接口不能被实例化的,所以要先给这个容器添加配置说明
 * $container->set('app\controllers\Driver','app\controllers\ManDriver');
 * 这是告诉容器当遇到app\controllers\Driver这个接口是用app\controllers\ManDriver类去实现
 * 7.此时容器里也有了注入类的所有方法了,可以用对象方式去调用里面的方法了,如: $car->run();
 *
***/

yii 简单依赖注入的更多相关文章

  1. YII容器类依赖注入

    程序 = 算法 + 数据结构 数据结构 制约了 算法的===>>>>依赖注入 依赖注入也就是解数据结构和算法耦合的思想 <?php /** * Created by Ph ...

  2. YII框架的依赖注入容器

    依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就 ...

  3. yii2之依赖注入与依赖注入容器

    一.为什么需要依赖注入 首先我们先不管什么是依赖注入,先来分析一下没有使用依赖注入会有什么样的结果.假设我们有一个gmail邮件服务类GMail,然后有另一个类User,User类需要使用发邮件的功能 ...

  4. SignalR中的依赖注入

    什么是依赖注入? 如果你已经熟悉依赖注入可以跳过此节. 依赖注入 (DI) 模式下,对象并不为自身的依赖负责. 下边的例子是一个主动 DI. 假设你有个对象需要消息日志.你可能定义了一个日志接口: C ...

  5. 依赖注入——angular

    在Angular中创建一个对象时,需要依赖另一个对象,这是代码层的一种依赖关系,当这种依赖被声明后,Angular通过injector注入器将所依赖的对象进行注入操作. 一.依赖注入的原理 看下面的示 ...

  6. 一文搞懂│php 中的 DI 依赖注入

    目录 什么是 DI / 依赖注入 依赖注入出现的原因 简单的依赖注入 高阶的依赖注入 依赖注入的应用 依赖注入高阶优化 什么是 DI / 依赖注入 依赖注入DI 其实本质上是指对类的依赖通过构造器完成 ...

  7. yii依赖注入和依赖注入容器

    依赖注入和依赖注入容器¶ 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Ser ...

  8. yii依赖注入

    为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Service Locator) ...

  9. TypeC一个微软开发的超简单.NET依赖注入/IoC容器

    控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...

随机推荐

  1. 懵懂的js原型

    说起原型,就得提起函数,js中据说是这样定义的,每个函数都有一个prototype 属性,(这个属性啊,又是个对象).为了构造函数能复用,就引出了原型,要把共享的东西放到原型上去.例如 //构造函数, ...

  2. JAVA源码分析-HashMap源码分析(一)

    一直以来,HashMap就是Java面试过程中的常客,不管是刚毕业的,还是工作了好多年的同学,在Java面试过程中,经常会被问到HashMap相关的一些问题,而且每次面试都被问到一些自己平时没有注意的 ...

  3. dos 批处学习笔记

    dos 批处理@ 只显示命令结果echo 回显pause 暂停del 删除set 查看系统变量>nul 正确命令输入空洞2>nul 错误命令输入空洞dir 显示目录和文件&& ...

  4. sublime 安装插件GitGutter报错,git binary cannot be found等等

    今天给sublime text安装插件GitGutter的时候,居然报错了,网上查找了下解决方法,在此记录下.因为本博主的电脑是windows的,所以这里只能提供windows的方法啦. 解决方法很简 ...

  5. (转载)详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    郑重声明:原文转载于http://dengqi.blog.51cto.com/5685776/1223132 向好文章致敬!!! 一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理 ...

  6. 分享公司DAO层数据库结果映射到对象的方法

    主题 前面写过一篇文章,分享了公司是怎么动态封装SQL查询条件的(http://www.cnblogs.com/abcwt112/p/5874401.html). 里面提到数据库查询结果二维数组最后是 ...

  7. juery学习总结——例子

    1.select元素在选择是找到选择的值和option中的值 <!DOCTYPE html> <html> <head lang="en"> & ...

  8. Lattice Reduction (LLL) 算法C代码实现

    废话不多说,大名鼎鼎的Lenstra-Lenstra-Lovasz(LLL) 算法.实现参考论文:Factoring Polynomials with Rational Coefficients, 作 ...

  9. [从产品角度学EXCEL 01]-EXCEL是怎样运作的

    这是<从产品角度学EXCEL>系列第二篇. 前言请看:从产品角度学EXCEL-系列0-为什么要关注EXCEL的本质 本文不接受无授权转载,如需转载,请先联系我,非常感谢. 1.EXCEL是 ...

  10. frame和bounds

    - frame 是一个以**父视图**为坐标系的位置- bounds 是一个以**自身**为坐标系的位置- 如果改变了bounds 那么会影响子控件的显示位置