Bug*_*rUK 8 php dependency-injection slim pimple
如何通过依赖注入将静态类传递给对象?
例如,Carbon使用静态方法:
$tomorrow = Carbon::now()->addDay();
Run Code Online (Sandbox Code Playgroud)
我有依赖Carbon的服务,目前我在依赖中使用库而不注入它们.但是,这增加了耦合,我想通过DI传递它.
我有以下控制器:
$container['App\Controllers\GroupController'] = function($ci) {
return new App\Controllers\GroupController(
$ci->Logger,
$ci->GroupService,
$ci->JWT
);
};
Run Code Online (Sandbox Code Playgroud)
我如何将碳传递给它?
调用静态方法是因为无需static实例化类对象即可调用它们。所以,你不能通过(甚至不是一个法律术语)。static classstatic class
可用选项有:
将对象传递Carbon:now()给构造函数:
$container['App\Controllers\GroupController'] = function($ci) {
return new App\Controllers\GroupController(
$ci->Logger,
$ci->GroupService,
$ci->JWT,
\Carbon:now() // here
);
};
Run Code Online (Sandbox Code Playgroud)传递一个可调用对象:
$container['App\Controllers\GroupController'] = function($ci) {
return new App\Controllers\GroupController(
$ci->Logger,
$ci->GroupService,
$ci->JWT,
['\Carbon', 'now'] // here or '\Carbon::now'
);
};
Run Code Online (Sandbox Code Playgroud)
然后Carbon使用类似以下内容创建实例:
$carb_obj = call_user_func(['\Carbon', 'now']);
$carb_obj = call_user_func('\Carbon::now');
Run Code Online (Sandbox Code Playgroud)使用第二个选项,您可以动态定义函数名称。