IOC-InversionofControl,即控制反转。它不是什么技术,而是一种设计思想。这篇文章主要介绍了php控制反转与依赖注入的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
控制反转
控制反转是一种思想,是一种设计模式,这种设计模式能够降低耦合性。
例如
<?php
class A{
public function getClassName(){
echo '我是class A';
}
}
class B{
public $test;
public function __construct()
{
$this->test = new A();
//在类的内部获取依赖的对象。
//把依赖的对象写死在 Class B 中,由 Class B 选择依赖的对象,这叫做控制正转。
}
}
$b = new B();
$b->test->getClassName();
//输出 我是class A
class B 的构造方法依赖 class A,如果把依赖的类( class A )写死在 class B 的构造方法中,这种写法耦合性非常高,
比如
如果 class A 改名了,我们还要修改 class B 的代码。
如果class B 不需要 class A 需要 class C ,我们还要修改 class B 的代码。
为了解决这个问题,我们可以用控制反转这种设计模式。
<?php
class A{
public function getClassName(){
echo '我是class A';
}
}
class B{
public $test;
public function __construct($obj)
{
$this->test = $obj;
//不在类的内部写死依赖的对象,而是通过外部以参数的形式传入依赖的对象,这叫控制反转。
}
}
$b = new B (new A()); //注入 class A 的实例
$b->test->getClassName();
//输出 我是class A
这样修改代码后,上面的两个问题也得到更好的解决。
如果 class A 改名了,我们不需要修改 class B 的代码,只需要修改传入 class B 构造方法的参数。
如果class B 不需要 class A 需要 class C ,我们不需要修改 class B 的代码,只需要修改传入 class B 构造方法的参数。
不把依赖的类( class A )写死在 class B 的构造方法中,而是在实例化 Class B 时把依赖的类(class A)以参数的形式从外部传入 class B 的构造方法中,这样在我们不需要 class A 的时候只需修改传入 class B 的构造方法的参数即可,无需修改 class B 的代码,这样就大大降低耦合性了。
其实讲人话就一句话,不要在方法中实例化类,而是通过向方法传参的方式把对象传进方法中。
至此,class B 从之前的主动选择依赖转变为被动从外部接收依赖,依赖对象的获取方式被反转,这就是控制反转。
依赖注入
依赖注入就把当前方法需要(依赖)的对象以传参的方式传(注)入到当前方法中。
依赖注入在上面的代码已经出现过了
$b = new B (new A());
// class B 的构造方法需要一个对象
//注入 class A 的实例
控制反转与依赖注入的关系可以用一句话来总结,可以用依赖注入实现控制反转。
到此这篇关于php控制反转与依赖注入的实现介绍的文章就介绍到这了,更多相关php控制反转与依赖注入内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:php控制反转与依赖注入的实现介绍
基础教程推荐
- 在Laravel中实现使用AJAX动态刷新部分页面 2023-03-02
- laravel 解决多库下的DB::transaction()事务失效问题 2023-03-08
- PHP中的错误及其处理机制 2023-06-04
- php array分组,PHP中array数组的分组排序 2022-08-01
- laravel ORM关联关系中的 with和whereHas用法 2023-03-02
- thinkphp3.2.3框架动态切换多数据库的方法分析 2023-03-19
- 使用PHP开发留言板功能 2023-03-13
- PHP获取MySQL执行sql语句的查询时间方法 2022-11-09
- PHP命名空间简单用法示例 2022-12-01
- PHP实现Redis单据锁以及防止并发重复写入 2022-10-12