我有一个使用Curl的beforeSend
回调的课程。这是:
$curl->beforeSend(function() use ($exchanger, $ratesUpdate) {
ExchangerRatesUpdate::create([
'exchanger_id' => $exchanger->id,
'rates_update_id' => $ratesUpdate->id
]);
});
我想通过将回调内部的逻辑提取到自己的方法来重构这段代码,例如:private function beforeSend($exchanger, $ratesUpdate)
并在$cur->beforeSend
中调用它。
我该怎么做?我发现其他答案说我可以传递一个数组,比如[$this, 'beforeSend']
,但它会抛出一个错误(从空值创建默认对象),而且我也无法找到如何将参数传递给该方法。
这种方法有效,但看起来我通过传递参数数组两次来完成双重工作:
$curl->beforeSend(function() use ($exchanger, $ratesUpdate) {
call_user_func_array([$this, 'beforeXmlFetching'], [
'exchanger' => $exchanger,
'ratesUpdate' => $ratesUpdate
]);
});
答案 0 :(得分:0)
我不知道我是否回答了您的问题,但在您的具体情况下,您可以实施builder
class ExchangerRatesUpdateBuilder
{
protected $exchanger;
protected $ratesUpdate;
public function build()
{
return ExchangerRatesUpdate::create([
'exchanger_id' => $this->exchanger->id,
'rates_update_id' => $this->ratesUpdate->id
]);
}
public function setExchanger($exchanger)
{
$this->exchanger = $exchanger;
return $this;
}
public function setRatesUpdate($ratesUpdate)
{
$this->ratesUpdate = $ratesUpdate;
return $this;
}
}
在您的脚本中,您必须像这样(如服务)实例化构建器:
$builder = new ExchangerRatesUpdateBuilder()
当你调用$ curl-> beforeSend()方法时,你可以传递'build'回调:
$curl->beforeSend([$builder->setExchanger($exchanger)->setRatesUpdate($ratesUpdate), 'build']);