Php 不确定Laravel在接口实现方面做了什么
我对php/Laravel真的很陌生。以下是设置: 在我的项目中,有一个特性叫做Php 不确定Laravel在接口实现方面做了什么,php,laravel,interface,traits,Php,Laravel,Interface,Traits,我对php/Laravel真的很陌生。以下是设置: 在我的项目中,有一个特性叫做RoutesNotifications.php。我假设这是一个Laravel特性,因为它位于vendor\Laravel文件夹下 在这个特性中,有一个函数如下所示: public function notify($instance) { app(Dispatcher::class)->send($this, $instance); } 我已经找到了调度器,它是一个接口。这也列在vendor\larav
RoutesNotifications.php
。我假设这是一个Laravel特性,因为它位于vendor\Laravel文件夹下
在这个特性中,有一个函数如下所示:
public function notify($instance)
{
app(Dispatcher::class)->send($this, $instance);
}
我已经找到了调度器,它是一个接口。这也列在vendor\laravel文件夹下的子目录中,因此我假设这也是laravel代码
我的问题是我不知道代码在这之后会到哪里去
Dispatcher
作为一个接口是定义send
签名的地方,但是如何确定运行send($this$instance)
时执行的代码的位置 app
是一个服务容器实例
调用app
为参数传递illighte\Contracts\Notifications\Dispatcher
接口,服务容器将解析服务容器中绑定到该接口的实现
illumb\Notifications\NotificationServiceProvider::register
负责设置接口的实现
最后,app(illumb\Contracts\Notifications\Dispatcher::class)
正在解析为illumb\Notifications\ChannelManager
的一个实例
应用程序(Dispatcher::class)
返回在laravel服务容器中注册的类的实例
此类应实现Dispatcher接口,当其他类需要Dispatcher
时,laravel应用程序将返回当前在服务容器中注册的实现
例如,您可以打开tinkerREPL,php artisan tinker
,然后输入此命令app(lightize\Contracts\Notifications\Dispatcher::class)
您将看到您返回了一个lightize\Notifications\ChannelManager
的实例
也就是说,当某个类需要一个调度程序时,laravel服务容器会小心地返回该调度程序的当前注册实现
您可以在中阅读有关服务容器的更多信息。感谢您的回答、解释和文档链接。正如承诺的那样,标记为接受答案并投票表决。谢谢谢谢你的回答,我投了赞成票,但我把奥卢瓦菲米的回答标为接受,因为它排在第一位。谢谢你的回答!好的,没问题,他以秒为单位排在第一位,这是个好问题,并不像你们想的那个样基本。