服务容器(Service Container)是一个用于管理类依赖和执行依赖注入的强大工具。 几乎所有的服务容器绑定都是在 服务提供器 中完成的

注意:

  • 如果一个类没有基于任何接口那么就没有必要将其绑定到容器。容器并不需要被告知如何构建对象,因为它会使用PHP的反射服务自动解析出具体的对象。

依赖注入

依赖注入的实质是通过构造函数 __construct 将类依赖注入到类中. 有些情况下也可以通过 setter 方法

什么叫依赖?

如果A类的功能实现需要B类的支持,就称A类依赖于B类。比如汽车需要车轮,就说汽车依赖车轮

什么叫注入?

一般是在类的构造方法里,传入另一个类的对象做为参数。比如汽车类A的构造方法,包含车轮B实例的参数

什么叫容器?

容器一般包含两个方法: bindmake

  • bind : 绑定”所依赖类B的描述Key”和”负责实例化依赖类B的闭包函数”

    1. public static function bind($name, Callable $resolver) {
    2. static::$registry[$name] = $resolver;
    3. }
  • make : 执行”所依赖类B的描述Key”所绑定的”实例化依赖类B的闭包函数”

    public static function make($name) {
      if (isset(static::$registry[$name])) {
          $resolver = static::$registry[$name];
          return $resolver();
      }
    }
    

    绑定

    解析