深入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 购房者("大明"); $大明->买房(); ?>