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 ...
随机推荐
- iis6 服务器做301跳转返回状态码200解决方法。
倘若你的配置和上图一样的话,在查询返回值是200的情况,你试着把你服务器上的安全狗或者防火墙,还有360网站卫士之类的安全软件停止试试,看是否能正常.
- HTML之CSS学习
学前预备 <!DOCTYPE html> <html> <head> <title>标题</title> <meta charset= ...
- Solr学习总结(八)IK 中文分词的配置和使用
最近,很多朋友问我solr 中文分词配置的问题,都不知道怎么配置,怎么使用,原以为很简单,没想到这么多朋友都有问题,所以今天就总结总结中文分词的配置吧. 有的时候,用户搜索的关键字,可能是一句话,不是 ...
- Django基础,Day6 - 单元测试tests
在django项目app目录下,有个tests.py,我们通常可以直接在这文件中写我们的单元测试代码. test for a model 根据前面章节的操作步骤下来,在Question Model中有 ...
- ajax传输中文乱码解决方法
问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,aj ...
- 【转载】在IT界取得成功应该知道的10件事
在IT界取得成功应该知道的10件事 2011-08-11 13:31:30 分类: 项目管理 导读:前面大多数文章都是Jack Wallen写的,这是他的新作,看来要成为NB程序员还要不停的自我总结 ...
- eclipse新建web项目开发JSP
1.创建项目:file---new--Dynamic Web Project 一直选next,到jsp文件目录所在地,打勾默认自动生成web.xml配置文件,也可以自己设置. 创建JSP文件: 选择创 ...
- js构造函数的方法与原型prototype
把方法写在构造函数内的情况我们简称为函数内方法,把方法写在prototype属性上的情况我们简称为prototype上的方法 函数内的方法: 使用函数内的方法我们可以访问到函数内部的私有变量,如果我们 ...
- ubuntu 系统下搭建Java的环境
1.首先可以使用 java -version来查看自己是否已经搭建了java的环境,如果出现了java的版本号则表示java的环境已经搭建好了!否则则继续下面的步骤进行java环境的搭建 2.进入Or ...
- spring 上传 下載文件
1,spring配置文件添加文件上传配置 <!-- 上传文件 --> <bean id="multipartResolver" class="org.s ...