Почему метод 'dispatch' только создает экземпляр и возвращает PendingDispatch без его планирования? - PullRequest
1 голос
/ 27 мая 2019

Я новичок в PHP / Laravel. Я работаю с работой Laravel, и все работает отлично. Однако, когда я смотрю на реализацию метода отправки, мне это кажется странным.

if (! function_exists('dispatch')) {
    /**
     * Dispatch a job to its appropriate handler.
     *
     * @param  mixed  $job
     * @return \Illuminate\Foundation\Bus\PendingDispatch
     */
    function dispatch($job)
    {
        return new PendingDispatch($job);
    }
}

Я ожидал бы некоторый код, который ставит в очередь задание или, по крайней мере, запускает что-то, чтобы запланировать выполнение задания позже. Однако метод создает только экземпляр PendingDispatch и возвращает его. Я также проверил конструктор PendingDispatch и не нашел ничего релевантного.

Может ли кто-нибудь помочь мне понять, как запланирована работа?

1 Ответ

3 голосов
/ 27 мая 2019

Всякий раз, когда мы отправляем задание в laravel, я вызываю помощника, которого вы упомянули в вопросе, после чего вызывается PendingDispatch ($ job), где задание назначается в конструкторе, если вы можете посмотреть на деструктор в том же файле, который найдетеприведенный ниже код

public function __destruct()
{
    app(Dispatcher::class)->dispatch($this->job);
}

Этот метод при вызове разрешает экземпляр Dispatcher из контейнера и вызывает для него метод dispatch ().__Destruct () - это магический метод PHP, который вызывается, когда все ссылки на объект больше не существуют или когда скрипт завершается, и поскольку мы нигде не храним ссылку на экземпляр PendingDispatch, метод __destruct будет вызван немедленно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...