PHP依赖注入是什么?
2021-09-04 / 646 阅读
参考文献:http://blog.kaiot.xyz/read/60.html
把有依赖关系的类放进容器中,解析出这些类的实例,就是依赖注入,目的是实现类的解耦。
实例:Class A中用到了Class B的对象 bObject,普通情况下,需要在类A的代码中显示的new出一个B的对象。采用依赖注入后,A的代码只需要定义一个私有的B对象,不需要直接new 来获取这个对象,而是通过相关容器控制程序来将B的对象在外部new出来并注入到A类的引用中。
示例代码:
<?php
class A{
protected $info;
// $b 为实例化的b
public function __construct($b){
$this->info = $b;
}
public function a(){
// 直接调用b中的方法
return $this->info->b();
}
}
class B{
public function __construct(){
}
public function b(){
return 'class b function b';
}
}
$b = new B();
$a = new A($b);
$c = $a->a();
var_dump($c);
以上就是个简单的依赖注入,但有可能类B中b方法改名为c了,那类A中调用a方法时触发的b方法同样要修改为c,还是进入了上面的怪圈中,稍有变动就要改动很多有关联的内容。
接口类
接口类特点:
- 接口的方法必须公开
- 接口的方法默认是抽象的,故不需要在方法名前加abstract
- 接口可以定义常量,但不能有成员属性,常量定义和用法和类中常量一样
- 类可以实现多个接口
- 接口也可继承接口
实例代码:
<?php
class A{
protected $info;
// $b 为实例化的b
public function __construct($b){
$this->info = $b;
}
public function a(){
// 直接调用b中的方法
return $this->info->b();
}
}
// 接口类
interface B{
// 抽象方法,没有具体逻辑
public function b();
}
class C implements B{
public function b(){
return 'class c function B';
}
}
class D implements B{
public function b(){
return 'class d function b';
}
}
$c = new C();
$a = new A($c);
$c = $A->a();
var_dump($c);
在此代码中,实例化A时,不管传入C的实例或者D的实例都不影响类A中的a方法调用注入对象的b方法(此方法的方法名在抽象类中定义)
最后更新:26个月前
本文链接:https://yuanm.ren/post/50.html
输入评论
不同时间,不同体验
@废物作家
1个月前
可惜...人生没有如果
@小羊
1个月前
正物博客更换链接,麻烦修改一下。 博客名称:正物博客 博客地址:https://www.zza.cn/ 头像地址:https://www.zza.cn/tx.png 博客描述:一场凡梦,一份追求。
@耀阳
2个月前
我更想回到20年前。。。那一个转折点,影响了后面的所有事情。。。
@目的地-Destination
2个月前
都是些日常琐事,留着也没什么意义😢,唉,现在每天忙的要死也没太多心思去整这些,能保证不关闭就行啦!
@小羊
2个月前