<?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. Date类

    Date类 构造方法: Date():根据当前的默认毫秒值创建对象 Date(long date):根据给定的默认毫秒值创建对象 成员方法: public long getTime():获取时间,以毫 ...

  2. UP Board 人若有大胆,板子就很惨:首次上电开机失败

    前言 原创文章,转载引用务必注明链接. 注意:拍照自带抖动功能,画质大家凑合着看.冬日天气干燥,手触摸板子前建议流水洗手或者握持大体积导电体将静电放走. 本文使用Markdown写成,为获得更好的阅读 ...

  3. Hibernate配置方式

    Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...

  4. yii2 可逆加密

    加密: $data 是你要加密的内容, $secretKey 是你自己设置的salt, $encryptedData = Yii::$app->getSecurity()->encrypt ...

  5. JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)

    一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ...

  6. DNA解链统计物理

    来源:Kerson Huang, Lectures on Statistical Physics and Protein Folding, pp 24-25 把双链DNA解开就像拉拉链.设DNA有\( ...

  7. 利用JS实现点击按钮后图片自动切换

    我么常常看到一个网站的主界面的图片可以切换自如,那么又是如何实现的呢? 1.HTML页面布局如图所示: Main(div) top(div)(显示需要显示的图片) bottom UL (li)< ...

  8. JSTL标签库(一)核心标签库

    核心标签库(core) 1.表达式操作 2.流程控制 3.迭代操作 4.URL操作 1.表达式操作 标签 语法 功能 说明 <c:out> <c:out value="&l ...

  9. [原创]CSS3打造动态3D气球

    周末在江边晨跑的时候发现很多 当时心血来潮就想,应该可以在网页中实现一下 这几天得闲就做了一下,效果如下 (尽量在最新版本的chrome或者firefox中查看) demo下载在文章最后 预览 --& ...

  10. JS trim

    JS 去掉左右两边空格 /** * 去掉左右两边空格 * @param str * @returns {*} */function myTrim(str){ return str.replace(/( ...