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也会去向容器要它自己需要的依赖。所有这些依赖关系的处理就完全托管给容器了,我们既不需要去关心依赖之间的层次关系,也避免了依赖之间的耦合。
需要注意的是,依赖注入容器一般只接受一个匿名函数,而不是一个实例化好的对象,匿名函数会告诉容器怎样去获得一个对象,这样可以使得一个服务在被需要的时候才会去实例化
以上就是本次介绍的全部相关知识点,感谢大家的学习和对黑区网络的支持。
