5分钟理解依赖注入和控制反转

时间: 2019-03-01阅读: 39标签: php

基本的解释

想必打开这篇文章的人,对依赖注入和控制反转都有了大致的概念。简单的说:控制反转是依赖注入的实现。


举一个例子

男人A 要找女朋友,他可以去网聊、去夜店、去酒吧等等各种地方碰运气,花钱花时间。这是一种找女朋友的方法,也是很多人的做法。

男人B 要找女朋友,他年纪大了没有那么多时间和精力在这方面花费气力,直接去相亲。这是很多大龄青年找女朋友的方法,也就是今天想说的方法。


简单的说明

假设以上例子就是找女朋友,找到女朋友就OK。那么哪一个效率更高呢?显然是男人B。

对于男人B 来说,他的目标是找女朋友,他 依赖 相亲 注入 女朋友。这里的相亲可以理解成为一个服务,比如说婚恋网站,同事朋友的介绍,婚介所等等。

对于男人A 来说,他的所投入的时间和金钱等,可以拥有更高质量的女朋友。可能对这个女朋友了如指掌,能完全摸清楚她的脾气,以至于能够控制她。

但对于男人B 来说,想了解和控制这个女朋友就不好说了。因为一点都不了解,更别说控制了。换句话说:控制 这个女朋友的能力,完全 反转 了。


代码的解释

很多人不理解依赖注入和控制反转主要是不熟悉适用场景,其实在很多框架中我们说用到了 IoC 和 DI,实际上都是一回事,他实际上就是我们设计模式的一种:门面模式,也称外观模式。

实际上,在去理解 依赖注入 和 控制反转 时,我们需要有两个概念。

  1. 我们需要做一件事;
  2. 项目中有提供做这件事的方法。


实际的代码

class Boy {
    public function getGirlfriend() {
        $site = new LoveSite();
        $site->createGirl();
    }
}

class LoveSite {
    public function createGirl() {}
}

$boy = new Boy;
$boy->getGirlfriend();

以上代码是个例子,对于 Boy 来说, LoveSite 是他的一个依赖,只有在使用 Boy,并调用 getGirlfriend 方法的时候,才会被它注入,并创建一个 girl。

而控制反转在这个例子中的体现就是用单独的一个 LoveSite 类去实现 createGirl 的功能,而不是把这个函数的代码写在 Boy 类中。


php类 属性和方法的关系

public属性:在类的外部和内部都可以调用 被继承能够重构, protected属性:在类的内部可以调用外部不能可以被继承并且重构,private属性:只有在类的内部调用 不能被继承

php回调函数的概念及实例

php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持。这两个函数的区别是call_user_func_array是以数组的形式接收回调函数的参数的。而call_user_func($callback,参数1,参数2,…)的参数个数根据回调函数的参数来确定的。

PHP的高效率写法

尽量静态化;如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。echo的效率高于print,因为echo没有返回值,print返回一个整型;在循环之前设置循环的最大次数,而非在在循环中;

对比 PHP 中 new static() 与 new self()

通过new static()与new self()都能产生实例对象,new static()是在PHP5.3版本中引入的新特性,本文对二者稍作对比。new self() 与 new static() 区别在于是否继承,如果没胡继承则二者效果相同,如果有继承,则self仍指向被定义时的类,而static则指向调用者的类。

浅谈PHP中pack、unpack的详细用法

PHP中有两个函数pack和unpack,很多PHPer在实际项目中从来没有使用过,甚至也不知道这两个方法是用来干嘛的。这篇文章来为大家介绍一下它俩到底是用来干啥的。

php面向对象中static静态属性和静态方法的调用

关于它们的调用,需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。

PHP Primary script unknown 终极解决方法

相信很多配置php环境的都遇到过这个恼人的问题:浏览器访问php文件,返回来 File not found、查看/var/log/nginx/error.log ,有 Primary script unknown,类似如下:

php后台运行以及定时任务的4种实现原理以及代码

后台任务在我们php编程中虽然用的不是很多甚至很多php程序员都没听过甚至觉得后台运行是不可能实现的,本人因为项目需求多次演变在这里分享给大家:写成网页浏览的形式打开即执行然后用http监控

可以提高php编程效率的20个要点

整理了可以提高php编程效率的20个要点,发博客记录一下,需要的朋友可以参考。还有,用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP源码会在双引号包围的字符串中搜寻变量

校正PHP服务器时间不准的问题

关于怎样解决PHP服务器时间不准的问题,得针对不同的情况进行不同的处理。下面是经常遇到的情况,及应对办法。方法一 如果你是管理员,直接去调整服务器的时间,只要服务器时间校正了,就没问题了。如果没法修改服务器时间,又要PHP程序显示的时间正确,那得通过PHP代码来实现。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全