如何理解php的依赖注入
之前写过关于php依赖注入的文章。。最近发现有的朋友对这个还是理解模糊,在这里我想写个简单的实例帮助朋友们理解下。。。
传统的思路是应用程序用到一个A类,就会创建A类并调用A类的方法,假如这个方法内需要一个B类,就会创建B类并调用B类的方法,而这个方法内需要一个C类,就会创建C类,接着做些其它工作。
<?php
class C
{
public function doSomething()
{
echo __METHOD__, '我是C类|';
}
} class B
{
public function doSomething()
{
$bim = new C();
$bim->doSomething();
echo __METHOD__, '我是B类|';
}
} class A
{
public function doSomething()
{
$bar = new B();
$bar->doSomething();
echo __METHOD__, '我是A类|';;
}
} $class = new A();
$class->doSomething(); //C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|
使用依赖注入的思路是应用程序用到A类,A类需要B类,B类需要C类,那么先创建C类,再创建B类并把C注入,再创建A类,并把B类注入,再调用A方法,A调用B方法,接着做些其它工作。
<?php class C
{
public function doSomething()
{
echo __METHOD__, '我是C类|';
}
} class B
{
private $c; public function __construct(C $c)
{
$this->c = $c;
} public function doSomething()
{
$this->c->doSomething();
echo __METHOD__, '我是B类|';
}
}
class A
{
private $b; public function __construct(B $b)
{
$this->b = $b;
} public function doSomething()
{
$this->b->doSomething();
echo __METHOD__, '我是A类|';;
}
} $class = new A(new B(new C()));
$class->doSomething(); // C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|
这就是控制反转模式。依赖关系的控制反转到调用链的起点。这样你可以完全控制依赖关系,通过调整不同的注入对象,来控制程序的行为。例如A类用到了memcache,可以在不修改A类代码的情况下,改用redis。
使用依赖注入容器后的思路是应用程序需要到A类,就从容器内取得A类,容器创建C类,再创建B类并把C注入,再创建A类,并把B注入,应用程序调用A方法,A调用B方法,接着做些其它工作.
总之容器负责实例化,注入依赖,处理依赖关系等工作。其实依赖注入不难理解哦。
如何理解php的依赖注入的更多相关文章
- Spring学习-理解IOC和依赖注入
最近刚买了一本介绍ssm框架的书,里面主要对Mybatis.spring.springmvc和redis做了很多的讲解,个人觉得虽然有的内容我看不懂,但是整体上还是不错的.最近正在学习中,一边学习一边 ...
- SpringBoot系列: 理解 Spring 的依赖注入(二)
==============================Spring 容器中 Bean 的名称==============================声明 bean 有两个方式, 一个是 @B ...
- SpringBoot系列: 理解 Spring 的依赖注入(一)
==============================Spring 的依赖注入==============================对于 Spring 程序, Spring 框架为我们提供 ...
- 如何理解 PHP的依赖注入(DI) 和 控制反转(IoC)
名词解释: IoC - Inversion of Control 控制反转 DI - Dependency Injection 依赖注入 依赖注入和控制反转说的实际上是同一个东西,它们是一种设计模式, ...
- 依赖注入(DI)和控制反转(IOC)的理解,写的太好了。
学习过spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI) 依赖注入和控制反转的理解,写的太好了。
轻松学,浅析依赖倒置(DIP).控制反转(IOC)和依赖注入(DI) 2017年07月13日 22:04:39 frank909 阅读数:14269更多 所属专栏: Java 反射基础知识与实战 ...
- Spring学习(三)——Spring中的依赖注入的方式
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...
- Spring学习(一)——Spring中的依赖注入简介【转】
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...
- IOC(依赖注入)原理
IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控.这也就是所谓"控制反转"的概念所在.控制权由应用代码中转到了外部容器,控制权的转移是所谓反转.Io ...
随机推荐
- Converting Recursive Traversal to Iterator
In this article, I'm going to introduce a general pattern named Lazy Iterator for converting recursi ...
- Windows Server2012 搭建域错误“本地Administraor账户不需要密码”
标签:MSSQL/SQLServer/域控制器提升的先决条件验证失败/密码不符合要求 概述 在安装WindowsServer2012域控出现administrator账户密码不符合要求的错误,但是实际 ...
- 利用python完成大学刷课(从0到完成的思路)
i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学 ...
- 一个xss漏洞到内网漫游【送多年心血打造的大礼包啦!】
i春秋作家:jasonx 原文来自:一个xss漏洞到内网漫游[送多年心血打造的大礼包啦!] 前言 渗透过程中,有时候遇某些网站,明明检测到有xss漏洞,但是盲打以后,收到的cookie还是不能登录后台 ...
- 一线互联网常见的14个Java面试题,你颤抖了吗程序员
跳槽不算频繁,但参加过不少面试(电话面试.face to face面试),面过大/小公司.互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺 ...
- 从零开始单排学设计模式「简单工厂设计模式」黑铁 III
阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...
- Git使用详细教程(4):git rm使用详解
我们使用git rm 文件名来进行删除文件的操作. git rm index.php这个命令把工作区的index.php删除并暂存了. 如何撤回已暂存的删除命令? 上图中已经给出了提示,使用git r ...
- new 操作符 做了什么
new 操作符 做了什么 new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例. 假设Test是一个构造函数,通常在创建对象的实例时,要使用new,eg:test = new ...
- ubuntu16.04 在线安装docker ce
官方文档:https://docs.docker.com/install/linux/docker-ce/ubuntu/ ubuntu创建普通用户: adduser dk001 给该用户添加sud ...
- deque源码2(deque迭代器、deque的数据结构)
deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_ ...