在PHP中链接方法并执行第一个被调用的方法,它是如何工作的?

时间:2018-02-28 10:10:58

标签: php laravel method-chaining

我现在和Laravel合作了一段时间,从一开始我一直想知道他们如何能够以随机顺序链接方法并仍然将整个链作为一个操作来执行。

例如,在控制台内核中:

protected function schedule(Schedule $schedule)
{
    $schedule->command('some-command')
             ->everyThirtyMinutes()
             ->before(function (Schedule $schedule) {
                 $schedule->command('some-other-command');
             });
}

首先调用command方法,但该命令每30分钟才会运行一次。该信息在调用command方法之后出现,但在执行之前仍处理完毕。 before方法也是如此。该方法最后调用,但some-other-command命令仍在首先执行。

我在互联网上搜索了答案,但我找不到答案。我希望你知道答案。

2 个答案:

答案 0 :(得分:1)

  

该方法最后调用,但some-other-command命令仍在执行。

因为这是before()方法的作用,所以在当前命令之前放置另一个命令(因此命名)。 正如类名Scheduler所暗示的那样,它设置了一些时间表,而不是按原样执行代码,所以问题在于对代码的作用有误解。

答案 1 :(得分:1)

这取决于您使用链接的上下文,在您的示例中,第一种方法是command

  

在日程表中添加新的Artisan命令事件。

它返回一个Event,这个Event实例有很多方法可以在链接模式下调用,因为它们返回$this巫婆意味着它们返回事件的当前实例,所以你可以调用Event`类提供的其他方法。

在你的例子中

  

安排活动每30分钟运行一次   返回值:$ this

  

注册要在操作之前调用的回调   返回值:$ this

关于订单,您必须首先致电command以获取Event实例,而对于其他方法,订单无效。

就像你告诉某人每隔三十分钟去市场一样,在每次关闭房门之前,如果你在进入市场关闭房门之前告诉他(或她),那就是同样的事情。三十分钟。