如何通过依赖注入将静态类传递给对象?
例如Carbon使用静态方法:
$tomorrow = Carbon::now()->addDay();
我有依赖Carbon的服务,目前我在依赖中使用库而不注入它们。但是,这会增加耦合,我想通过DI传递它。
我有以下控制器:
$container['App\Controllers\GroupController'] = function($ci) {
return new App\Controllers\GroupController(
$ci->Logger,
$ci->GroupService,
$ci->JWT
);
};
如何将碳传递给它?
答案 0 :(得分:3)
静态方法称为static
,因为可以在不使用实例化类对象的情况下调用。因此,您无法通过static class
(即使static class
也不是合法用语)。
可用选项包括:
将Carbon:now()
的对象传递给构造函数:
$container['App\Controllers\GroupController'] = function($ci) {
return new App\Controllers\GroupController(
$ci->Logger,
$ci->GroupService,
$ci->JWT,
\Carbon:now() // here
);
};
传递可调用对象:
$container['App\Controllers\GroupController'] = function($ci) {
return new App\Controllers\GroupController(
$ci->Logger,
$ci->GroupService,
$ci->JWT,
['\Carbon', 'now'] // here or '\Carbon::now'
);
};
稍后使用以下内容创建Carbon
实例:
$carb_obj = call_user_func(['\Carbon', 'now']);
$carb_obj = call_user_func('\Carbon::now');
使用第二个选项,您可以动态定义函数名称。