我在教程中:
public function execute(BaseRequest $request)
{
$operation = function() use($request) {
return $this->service->execute($request);
};
return $this->session->executeAtomically(
$operation->bindTo($this)
);
}
匿名函数给我什么?
我为什么不能这样做:
public function execute(BaseRequest $request)
{
$operation = $this->service->execute($request);
return $this->session->executeAtomically(
$operation->bindTo($this)
);
}
?
最佳答案
我不知道您在这里使用什么框架,但是我的假设是executeAtomically
包含一些设置和拆卸逻辑,可能启动和提交数据库事务。在这种情况下,您希望方法的最终执行顺序为:
框架设置代码由$this->session->executeAtomically()
评估。
您的代码($this->service->execute($request);
)由$this->session->executeAtomically()
评估。
框架拆卸代码由$this->session->executeAtomically()
评估。
通过自己计算表达式而不是将表达式包装在闭包中,代码将按以下顺序运行:
您的代码由您的方法评估。
框架设置代码由$this->session->executeAtomically()
评估。
框架拆卸代码由$this->session->executeAtomically()
评估。
闭包的大多数现实世界用例都涉及某种延迟执行,例如执行设置/拆卸逻辑,执行“延迟加载”,多次执行代码(如循环执行)等。