Laravel 为什么';调度';方法只实例化并返回PendingDispatch而不调度它?

Laravel 为什么';调度';方法只实例化并返回PendingDispatch而不调度它?,laravel,laravel-5,Laravel,Laravel 5,我是一名PHP/Laravel新手。我和拉威尔一起工作,一切都很好。 然而,当我看到dispatch方法的实现时,我觉得很奇怪 if (! function_exists('dispatch')) { /** * Dispatch a job to its appropriate handler. * * @param mixed $job * @return \Illuminate\Foundation\Bus\PendingDispatch

我是一名PHP/Laravel新手。我和拉威尔一起工作,一切都很好。 然而,当我看到dispatch方法的实现时,我觉得很奇怪

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构造函数,没有发现任何相关内容


有人能帮我了解一下作业是如何安排的吗?

每当我们在laravel分派作业时,我都会给您提到的助手打电话,然后在构造函数中分配作业的地方调用PendingDispatch($job),如果您可以查看同一文件中的析构函数,您会发现下面的代码

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

调用此方法时,将从容器中解析Dispatcher实例,并对其调用dispatch()方法。__destruct()是一个PHP神奇的方法,当对象的所有引用都不存在或脚本终止时会调用它,因为我们不会将对PendingDispatch实例的引用存储在任何将立即调用_destruct方法的地方

事实上,我没有查看析构函数。我以前从未见过在销毁步骤中调用代码的这种模式。当我们与PendingDispatch实例没有任何其他关系时,它确保作业真正排队。谢谢