Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不确定Laravel在接口实现方面做了什么_Php_Laravel_Interface_Traits - Fatal编程技术网

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

我对php/Laravel真的很陌生。以下是设置:

在我的项目中,有一个特性叫做
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
服务容器会小心地返回该
调度程序的当前注册实现


您可以在中阅读有关服务容器的更多信息。

感谢您的回答、解释和文档链接。正如承诺的那样,标记为接受答案并投票表决。谢谢谢谢你的回答,我投了赞成票,但我把奥卢瓦菲米的回答标为接受,因为它排在第一位。谢谢你的回答!好的,没问题,他以秒为单位排在第一位,这是个好问题,并不像你们想的那个样基本。