PHP依赖注入容器知识点浅析(2)
在程序启动的时候,我们可以在一个地方统一的注册好一系列的基础服务。
<?php $container = new Container(); $container['notify'] = function($c) { return new Notify(); }; $container['email'] = function($c) { return new Email(); };
就会变成这样
<?php class User { public function register($user) { // 注册操作 ... // 发送确认邮件 $container('notify')->sendEmail('register', $user); } } class Notify { public function sendEmail($type, $data) { switch $type { case 'register': // 发送注册确认邮件 $email = $container['email']; $email->send($data); ... } } } class Email { public function send($data) { // 发送邮件 } }
就是当User需要Notify的时候,会去向容器要这个类的对象,那至于Notify再依赖什么其他的东西,我就不用管了,因为Notify也会去向容器要它自己需要的依赖。所有这些依赖关系的处理就完全托管给容器了,我们既不需要去关心依赖之间的层次关系,也避免了依赖之间的耦合。
需要注意的是,依赖注入容器一般只接受一个匿名函数,而不是一个实例化好的对象,匿名函数会告诉容器怎样去获得一个对象,这样可以使得一个服务在被需要的时候才会去实例化
以上就是本次介绍的全部相关知识点,感谢大家的学习和对黑区网络的支持。