我是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构造函数,没有发现任何相关内容。
有人可以帮助我了解这份工作的时间表吗?
答案 0 :(得分:2)
每当我们在laravel中分配作业时,我都会调用您提到的帮助程序,然后在构造函数中分配作业的位置调用PendingDispatch($ job),如果您可以查看同一文件中的析构函数下面的代码
public function __destruct()
{
app(Dispatcher::class)->dispatch($this->job);
}
此方法在被调用时将解析容器中的Dispatcher实例,并在其上调用dispatch()方法。 __destruct()是一种PHP魔术方法,当对该对象的所有引用不再存在或脚本终止时会调用该方法,并且由于我们不在任何地方都将存储对PendingDispatch实例的引用,因此会立即调用__destruct方法