茅塞顿开!2年了,我好像理解了Laravel的服务提供者
2022-06-14更新:服务绑定只是服务提供者的其中一个功能,还有其他的我还没有搞懂作者的设计思想
当我有一个发送短信的需求,我可以写一个接口类(App\Libraries\Interfaces\SmsInterface),必须实现send()方法。
Interface SmsInterface
{
public function send(string $mobile, string $code):bool;
}
我现在要用到阿里云短信(App\Libraries\AliSms),这个时候我就将App\Libraries\Interfaces\SmsInterface绑定App\Libraries\AliSms,然后我在代码中调用短信类的时候直接依赖注入App\Libraries\Interfaces\SmsInterface
//绑定
public function register()
{
$this->app->singleton(SmsInterface::class, function ($app) {
return new AliSms();
});
}
class SmsController
{
//业务代码,发送短信
public function send(SmsInterface $sms, Request $request)
{
$sms->send($request->mobile, '1234');
}
}
如果后期要改成腾讯云短信,我就可以写一个TxSms实现SmsInterface接口,然后在服务提供者中把SmsInterface绑定TxSms,就不需要在代码中把所有的类都修改一遍了。
public function register()
{
$this->app->singleton(SmsInterface::class, function ($app) {
return new TxSms();
});
}
我认为我的理解是没有问题的,用laravel2年了,算是终于明白服务提供者了,网上很多教程我感觉都是翻译的国外的,狗屁不通,用短信的例子讲一下就明白了!
推荐文章: