yii 简单依赖注入
<?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 简单依赖注入的更多相关文章
- YII容器类依赖注入
		
程序 = 算法 + 数据结构 数据结构 制约了 算法的===>>>>依赖注入 依赖注入也就是解数据结构和算法耦合的思想 <?php /** * Created by Ph ...
 - YII框架的依赖注入容器
		
依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就 ...
 - yii2之依赖注入与依赖注入容器
		
一.为什么需要依赖注入 首先我们先不管什么是依赖注入,先来分析一下没有使用依赖注入会有什么样的结果.假设我们有一个gmail邮件服务类GMail,然后有另一个类User,User类需要使用发邮件的功能 ...
 - SignalR中的依赖注入
		
什么是依赖注入? 如果你已经熟悉依赖注入可以跳过此节. 依赖注入 (DI) 模式下,对象并不为自身的依赖负责. 下边的例子是一个主动 DI. 假设你有个对象需要消息日志.你可能定义了一个日志接口: C ...
 - 依赖注入——angular
		
在Angular中创建一个对象时,需要依赖另一个对象,这是代码层的一种依赖关系,当这种依赖被声明后,Angular通过injector注入器将所依赖的对象进行注入操作. 一.依赖注入的原理 看下面的示 ...
 - 一文搞懂│php 中的 DI 依赖注入
		
目录 什么是 DI / 依赖注入 依赖注入出现的原因 简单的依赖注入 高阶的依赖注入 依赖注入的应用 依赖注入高阶优化 什么是 DI / 依赖注入 依赖注入DI 其实本质上是指对类的依赖通过构造器完成 ...
 - yii依赖注入和依赖注入容器
		
依赖注入和依赖注入容器¶ 为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Ser ...
 - yii依赖注入
		
为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(Denpdency Injection, DI)和服务定位器(Service Locator) ...
 - TypeC一个微软开发的超简单.NET依赖注入/IoC容器
		
控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...
 
随机推荐
- Lazy Load, 延迟加载图片的 jQuery 插件.
			
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...
 - Android File存储
			
原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_File_store.html 一 概念 Android系统中提供了一种文件读写的方 ...
 - BZOJ4516: [Sdoi2016]生成魔咒
			
果然SA比SAM+map快~加了fread目前rank1. 首先这是SAM裸题,然而SA求本质不同子串个数也很容易.考虑倒着建SA,这样没错加一个字符就变成加一个后缀,其他后缀都不变,那么i的答案就是 ...
 - 我的第一个wcf
			
vs2012中新建一个解决方案 新建WCF项目RestApi 添加实体类 [DataContract] public class Employee { private Guid id; private ...
 - SQL语句生成指定范围内随机数
			
1.生成随机实型数据 create procedure awf_RandDouble @min dec(14,2), @max dec(14,2), @result dec(14,2) output ...
 - Android 的Parcelable接口
			
此文转载自http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html 1. Parcelable接口 Interface ...
 - 【bzoj1606】[Usaco2008 Dec]Hay For Sale 购买干草
			
题目描述 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草. 顿因有H(1≤H≤5000)包干草,每一包都有它的体 ...
 - nmq消息队列解析
			
消息中间件NMQ 1.What is nmq? nmq = new message queue; 一个通用消息队列系统 为在线服务设计 什么是消息队列?问什么需要?有哪些功能? 消息队列的本质:1.多 ...
 - php的memcache安装,在window10下面
			
1.memcached-win对应得安装包 2.解压,可以放到任意目录,以管理员身份打开cmd 3.在安装的目录下面,执行如下命令 memcached.exe -d install 安装 Memcac ...
 - java json数据的处理
			
// 返回documentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); ...