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也会去向容器要它自己需要的依赖。所有这些依赖关系的处理就完全托管给容器了,我们既不需要去关心依赖之间的层次关系,也避免了依赖之间的耦合。

需要注意的是,依赖注入容器一般只接受一个匿名函数,而不是一个实例化好的对象,匿名函数会告诉容器怎样去获得一个对象,这样可以使得一个服务在被需要的时候才会去实例化

以上就是本次介绍的全部相关知识点,感谢大家的学习和对黑区网络的支持。