【发布时间】:2017-11-21 16:22:51
【问题描述】:
所以,我有两个不同的课程:
A 类
class A implements SomeContract
{
public function extraThicc()
{
return 'Filthy Frank';
}
}
B 类
class B implements SomeContract
{
public function extraThicc()
{
return 'iDubbbz';
}
}
界面
interface SomeContract
{
public function extraThicc();
}
老板班
class Boss
{
public $someVar
public function __construct(SomeContract $someVar)
{
$this->someVar = $someVar;
}
}
服务提供商
$this->app->bind('Boss::class', function($app,$param){
if ($param['type'] == 'A') return new A();
if ($param['type'] == 'B') return new B();
});
解决办法
public function boss($type)
{
return app()->makeWith('Boss::class', ['type'=>$type')]);
}
门面
class CoolFacade extends Facade
{
protected static function getFacadeAccessor() { return 'cool'; }
}
控制者
class StarWarsBattlefrontController extends Controller
{
public function index()
{
return 'Star Wars: Battlefront 2 Loot Boxes are bad, says:'.Cool::Boss('A')->extraThicc();
}
}
有没有更好的方法将依赖项注入到类中?因为我认为这不是在服务提供者的绑定方法中使用 if 语句的好习惯。
【问题讨论】:
标签: php laravel dependency-injection