简单的容器管理实现
composer require toolkit/di
public function set(string $id, mixed $definition, array $opts = []): Container
string $id
服务组件注册id
mixed(string|array|object|callback) $definition
服务实例对象|服务信息定义
- string:
$definition = className
- array:
$definition = [
// 1. 仅类名 参数($definition[0])则传入对应构造方法
'class' => 'className',
// 2. 类的静态方法, 参数($definition[0])则传入对应方法 className::staticMethod(args...)
'class' => 'className::staticMethod',
// 3. 类的动态方法, 参数($definition[0]) 则传入对应方法 (new className)->method(args...)
'class' => 'className->method',
// 设置参数方式, 没有key
[
arg1,arg2,arg3,...
]
// 设置属性 , // prop1 prop2 prop3 将会被收集 作为属性
prop1 => value1,
prop2 => value2,
... ...
// 一些服务设置(别名,是否共享). 将会合并到最后一个参数中
'_options' => [...]
]
- object:
$definition = new xxClass();
- closure:
$definition = function($di){
return object;
};
- array
$opts
选项
[
'shared' => (bool), 是否共享,单例
'locked' => (bool), 是否锁定服务
'aliases' => (array), 别名
'init' => (bool), 立即初始化
]
MIT