easySwoole 实现了 IoC 容器,使用 IoC 容器可以很方便的存储/获取资源,实现解耦。和其他对象一样,Di 也是以单例的形式存在,使用 Di::getInstance() 的方式获取。

如果你不懂得 IoC 容器具体是个什么东西,那么可以简单的理解为是一个容器,你可以使用 key=>value 的形式往容器里面保存资源,当需要某个资源的时候,使用 key 就可以从容器中获取到对应的 value。

上面的描述听起来像这个数组,但是和数组不同的是,IoC 容器的作用域是全局的,这就意味着你在 A 函数中保存了某个资源,在 B 函数中可以从 IoC 容器中获取到该资源。A 和 B 之间不必通过传参来传递资源。从这点上来看,IoC 容器实现了解耦。

但是 IoC 的功能不只是这么简单,除了原样返回注入的类型,IoC 容器还可以注入两种特殊的数据类型

  • is_callable 对象
  • 类名

当注入的资源为这两种类型的时候,那么在使用函数 get 获取资源的时候,IoC 会进行一些额外的处理 :

当注入资源为 is_callable 的时候,IoC 在 get 函数被调用的时候,会自动调用这个 is_callable 资源,直接返回函数调用的结果。

如果注入的资源是一个存在的类名,那么 IoC 在 get 函数被调用的时候,就会直接实例化一个对象,直接返回这个对象。

在注入以上两个资源的时候, set 函数可以传递第三个参数,第三个参数为一个数组,这个数组的元素就是调用 is_callable 资源 / 实例化对象所需要的参数。

支持函数列表

  • set($key, $value, $params = [])

用于注入资源,当注入的资源为 is_callable 或者类名的时候,可以提供第三个 params 参数

  • get($key)

根据 key 从 IoC 容器中获取到资源,如果注入的资源是 is_callable 对象 或者类名,那么得到的结果为执行结果或者类实例。

  • clear()

清空 IoC 容器的所有内容。

  • delete($key)

从 IoC 容器中删除 $key 所指定的资源。

results matching ""

    No results matching ""