深入laravel6.0框架中的IOC和DI原理
官方解释:
IOC – 控制反转 DI – 依赖注入
通俗举例:
小明以前很穷,风餐露宿,居无定所。现在发财了,自己也想拥有属于自己的房子,这个时候小明想,要不回老家盖一栋房子,一来可以住,二来可以光宗耀祖,这个时候,小明需要自己去打造一栋房子;后来小明又想,为何不在城市里直接买套房呢,生活更加丰富多彩也方便。于是,小明就找了房产中介(IOC容器)买了房子(依赖注入),最终小明很快就住上了属于自己的房子,开心快乐极了。。。
小明 依赖 房子,小明从自己盖房子(自己“控制”房子)到找中介买房子(让中介“控制”房子),这就叫做控制反转,也就是IOC;而房产中介根据小明的需求,直接把房子提供给小明(当然小明付钱了),这就叫做依赖注入,也就是DI。
当然,这个房子并不是房产中介建设的,而是开发商建设的,这个开发商就是服务提供者。
三十年后,小明的这套房子格局跟不上时代了,住得不舒服,想改造/重新装修房子,但是时间成本太高了,于是,小明又找房产中介买了房子,小明又很快住上新房子了。。。这也体现了面向对象中类的单一职责原则。
目的
采用IOC思想和DI设计模式,主要目的是:解耦
开车式:异地恋。就算中间隔着一个距离,但也不影响真心的相爱着。
原生代码实现
传统写法
<?php
/**
* Create by PhpStorm
* User : Actor
* Date : 2019-11-01
* Time : 22:03
*/
/**
* Class 购房者
*/
class 购房者
{
private $姓名;
public function __construct($姓名)
{
$this->姓名 = $姓名;
}
public function 买房()
{
$新房 = new 商品房("0001", "四室两厅", "180平方米");
echo "我是".$this->姓名."
";
echo "我买了". $新房->获取户型(). "的房子了"."
";
echo "我买了". $新房->获取面积(). "的房子了"."
";
}
}
/**
* Class 商品房
*/
class 商品房
{
private $房源编号;
private $户型;
private $面积;
public function __construct($房源编号, $户型, $面积)
{
$this->房源编号 = $房源编号;
$this->户型 = $户型;
$this->面积 = $面积;
}
public function 获取面积()
{
return $this->面积;
}
public function 获取户型()
{
return $this->户型;
}
}
$大明 = new 购房者("大明");
$大明->买房();
?>



