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

问题描述 投票:3回答:2

我现在和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命令仍在执行。

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

php laravel method-chaining
2个回答
1
投票

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

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


1
投票

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

在计划中添加新的Artisan命令事件。

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

在你的例子中

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

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

关于顺序你必须首先调用command来获取Event实例,而对于其他方法,该顺序无效。

就像你告诉某人每隔三十分钟就去市场一样,每次关门之前都是这样,如果你告诉他(或她)之前你去市场关闭房门并且每隔三十分钟走一次就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.