PHP依赖注入是什么?
2023-04-18 16:26:58 时间
PHP依赖注入是什么?
本文最后更新时间超过30天,内容可能已经失效。
参考文献: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方法(此方法的方法名在抽象类中定义)
- THE END -
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击