首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不确定Laravel正在用接口实现做什么

不确定Laravel正在用接口实现做什么
EN

Stack Overflow用户
提问于 2019-08-21 19:36:17
回答 2查看 320关注 0票数 2

我对php/Laravel非常陌生。下面是设置:

在我的项目中,有一个名为RoutesNotifications.php的特性。我认为这是一个Laravel特性,因为它位于供应商\laravel文件夹下。

在这个特性中,有一个函数如下所示:

代码语言:javascript
复制
public function notify($instance)
{
    app(Dispatcher::class)->send($this, $instance);
}

我已经找到了Dispatcher,它是一个接口。这也是在供应商\ laravel文件夹下的子目录中列出的,所以我假设这也是laravel代码。

我的问题是,我不知道接下来的代码是什么。Dispatcher是一个接口,是定义send签名的地方,但是我如何确定在运行send($this, $instance)时在哪里执行代码呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-21 20:02:26

app是一个服务容器实例。

调用app为参数传递Illuminate\Contracts\Notifications\Dispatcher接口时,服务容器将解析服务容器中的实现绑定到该接口。

Illuminate\Notifications\NotificationServiceProvider::register负责设置接口的实现。

最后,app(Illuminate\Contracts\Notifications\Dispatcher::class)解析为Illuminate\Notifications\ChannelManager的一个实例。

https://github.com/laravel/framework/blob/v5.8.33/src/Illuminate/Notifications/NotificationServiceProvider.php#L39

票数 2
EN

Stack Overflow用户

发布于 2019-08-21 20:02:47

app(Dispatcher::class)返回在laravel Service Container中注册的类的一个实例。

这个类应该实现Dispatcher接口,当其他类需要Dispatcher时,laravel应用程序返回当前在Service Container中注册的实现。

例如,您可以打开修补程序REPLphp artisan tinker,并输入这个命令app(Illuminate\Contracts\Notifications\Dispatcher::class),您将看到作为回报,您有一个Illuminate\Notifications\ChannelManager实例。

也就是说,当某个类需要一个Dispatcher时,laravel service container会小心地返回该Dispatcher的当前注册实现。

您可以在正式文件中阅读关于服务容器的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57598191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档