Laravel 为什么';调度';方法只实例化并返回PendingDispatch而不调度它?
我是一名PHP/Laravel新手。我和拉威尔一起工作,一切都很好。 然而,当我看到dispatch方法的实现时,我觉得很奇怪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
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实例没有任何其他关系时,它确保作业真正排队。谢谢