簡體   English   中英

在 PHP 中鏈接方法並將第一個調用的方法作為最后一個執行,它是如何工作的?

[英]Chaining methods in PHP and execute the first called method as last, how does it work?

我現在使用 Laravel 有一段時間了,從一開始我就想知道他們如何能夠以隨機順序鏈接方法並且仍然將整個鏈作為一個操作執行。

例如,在控制台內核中:

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

command方法首先被調用,但是該命令只會每三十分鍾運行一次。 該信息在調用command方法之后出現,但在執行它之前仍在處理。 before方法也是如此。 該方法最后被調用,但some-other-command命令仍然首先被執行。

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

該方法最后被調用,但 some-other-command 命令仍然首先被執行。

因為這就是before()方法所做的,在當前命令之前(因此得名)放置另一個命令。 正如類名Scheduler所暗示的那樣,它正在設置一些時間表,而不是按原樣執行代碼,所以問題是對代碼的作用的誤解。

這取決於您使用鏈接的上下文,在您的示例中,第一種方法是命令

將新的 Artisan 命令事件添加到計划中。

它返回一個Event ,這個 Event 實例有很多你可以在鏈接模式下調用的方法,因為它們返回$this witch 意味着它們返回事件的當前實例,這樣你就可以調用 Event` 類的另一個方法提供。

在你的例子中

安排事件每三十分鍾運行一次。
返回值:$this

注冊一個在操作之前調用的回調。
返回值:$this

關於您必須首先調用command以獲取Event實例的順序,對於其他兩個方法,該順序無效。

就像你告訴某人每 30 分鍾去一次市場並在每次關門之前告訴他(或她)在你去市場之前關上房門並每 30 分鍾去一次也是一樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM