[PHP] 理解依赖注入容器
2023-02-18 15:37:28 时间
容器就是个存东西的地方
依赖注入,就是通过构造函数,属性或者set方法传递对象的方式
如果依赖的类太多了,那么通过上面的方式传递对象就很繁琐
那么我们就可以直接传进去一个容器,需要的时候就在容器里面去拿就简单多了
这就是我们的容器类
//简单容器类 class Container { private $s=array(); function __set($k, $c) { $this->s[$k]=$c; } function __get($k) { return $this->s[$k]($this); } }
User类里面需要使用Book和Goods对象,在容器里创建后,在User类里面只需要直接拿就可以了
class User{ private $c; public function __construct(Container $c) { $this->c=$c; } public function doBook(){ $this->c->book->toDo(); } public function doGoods(){ $this->c->goods->toDo(); } } class Book{ public function toDo(){ echo "do book\n"; } } class Goods{ public function toDo(){ echo "do goods\n"; } } $c=new Container(); $c->book=function(){ return new Book(); }; $c->goods=function(){ return new Goods(); }; $user=new User($c); $user->doBook(); $user->doGoods();
相关文章
- PaddleHub--{超参优化AutoDL Finetuner}【二】
- 应用实践:Paddle分类模型大集成者[PaddleHub、Finetune、prompt]
- 从Thread.start()方法看Thread源码,多次start一个线程会怎么样
- Thread类源码剖析
- zookeeper(zkCli)命令概览
- 终极锁实战:单JVM锁+分布式锁
- AbstractQueuedSynchronizer AQS框架源码剖析
- 在openjdk8下看Unsafe源码
- eclipse卡死在search for main types 20 files to index
- 多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture
- 同步中的四种锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
- 根据CPU核心数确定线程池并发线程数
- 分布式共识算法 (二) Paxos算法
- secureCRT关闭连接自动关闭tomcat服务
- apache的MultipartEntityBuilder文件上传
- JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
- jdk源码剖析四:JDK1.7升级1.8 HashMap原理的变化
- jdk源码剖析二: 对象内存布局、synchronized终极原理
- jdk源码剖析一:OpenJDK-Hotspot源码包目录结构
- JDK8-十大新特性-附demo