php 依赖注入 数据库切换_php的依赖注入和控制反转

依赖注入(DI)和控制反转(IOC)基本是一个意思,因为说起来谁都离不开谁。

简单来说,a依赖b,但a不控制b的创建和销毁,仅使用b,那么b的控制权交给a之外处理,这叫控制反转(IOC),而a要依赖b,必然要使用b的instance,那么通过a的接口,把b传入;

通过a的构造,把b传入;

通过设置a的属性,把b传入;

这个过程叫依赖注入(DI)。

那么什么是IOC Container?

随着DI的频繁使用,要实现IOC,会有很多重复代码,甚至随着技术的发展,有更多新的实现方法和方案,那么有人就把这些实现IOC的代码打包成组件或框架,来避免人们重复造轮子。

所以实现IOC的组件或者框架,我们可以叫它IOC Container。

for example

创建使用类和工具类

//工具类1class OneTool

{

public function game($user)

{

echo $user."打开了游戏\n";

}

public function read($user)

{

echo $user."阅读\n";

}

public function video($user)

{

echo $user."看视频\n";

}

}

//使用类class Person

{

private $_age = "";

protected $_sex = "";

private $_name = "";

public function __construct()

{

$this->_name = "xiaohong";

}

//打游戏 public function game()

{

new OneTool()->game($this->_name);

}

//学习 public function read()

{

new OneTool()->read($this->_name);

}

//看视频 public function video()

{

new OneTool()->video($this->_name);

}

}

$person = new Ming();

$person->read();

$person->video();

$person->game();

人们可以使用工具1去做想做的事情,时代发展,工具1渐渐被淘汰,工具2上场,人们不得不改变自己的思维去使用工具2,将自己工具1的使用改为工具2,尽管过程很痛苦

//工具类2class TwoTool

{

public function travel($user)

{

echo $user."打开了游\n";

}

public function conversation($user)

{

echo $user."阅读\n";

}

public function teach($user)

{

echo $user."传授\n";

}

}

//使用类class Person

{

private $_age = "";

protected $_sex = "";

private $_name = "";

public function __construct()

{

$this->_name = "xiaohong";

}

public function conversation()

{

new TwoTool()->conversation($this->_name);

}

public function travel()

{

new TwoTool()->read($this->_name);

}

public function teach()

{

new TwoTool()->teach($this->_name);

}

}

人们有了工具2之后生活质量必须提高一档次,但是高质量生活后,也想慢下来歇歇,发现慢下来还要改变自己,太难了

这个时候人们就像办法如何可以把这种痛苦减少,交给第三方时间规划器就好使,控制反转,控制权不在自己手上,我不用天天操心是不是该做什么了,时间规划器弄好一切给我们,直接使用

class Person

{

private $_age = "";

protected $_sex = "";

private $_name = "";

public function __construct($tool)

{

$this->_name = "xiaohong";

$this->_tool = $tool;

}

//打游戏 public function game()

{

$this->_tool->read($this->_name);

}

//学习 public function read()

{

$this->_tool->read($this->_name);

}

//看视频 public function video()

{

$this->_tool->video($this->_name);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值