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 所指定的资源。