Error: Function name must be a string with Closure callback
Error: Function name must be a string with Closure callback
我正在尝试编写一个带有回调函数的函数。
这是我的回调函数
public function functionWithCallback($field, $value, Closure $callback = null)
{
$adminIds = Admin::when(!$callback, function ($query) use ($field, $value) {
$query->where($field, $value);
})->when($callback, $callback($query)) /* Error on this line */
->get()->pluck('id')->toArray();
}
这是函数调用在参数中有回调的函数
public function functionCallToCallback()
{
$this->functionWithCallback('id', 1);
}
public function functionCallToCallback2()
{
$this->functionWithCallback('name', 'Test', function ($query) use ($value) {
$query->where('name', 'like', '%' . $value . '%');
});
}
当我运行这段代码时,它抛出了一个异常
Error: Function name must be a string
包含此代码的行中抛出的错误when($callback, $callback($query))
。但是当我评论函数 functionCallToCallback
时,它抛出了另一个错误:
ErrorException: Undefined variable: query
有人知道怎么解决吗?谢谢
您正在调用回调而不是将回调传递给 when
:
when($callback, $callback($query))
when
的第二个参数是回调:
when($callback, $callback)
尽管您不需要对 when
的额外调用,因为您可以将两个回调都传递给对 when
:
的调用
$adminIds = Admin::when($callback, $callback, function ($query) use ($field, $value) { ... })
->pluck('id')->toArray();
"You may pass another closure as the third argument to the when
method. This closure will only execute if the first argument evaluates as false
."
旁注:不确定 functionCallToCallback2
中 $value
的来源
我正在尝试编写一个带有回调函数的函数。 这是我的回调函数
public function functionWithCallback($field, $value, Closure $callback = null)
{
$adminIds = Admin::when(!$callback, function ($query) use ($field, $value) {
$query->where($field, $value);
})->when($callback, $callback($query)) /* Error on this line */
->get()->pluck('id')->toArray();
}
这是函数调用在参数中有回调的函数
public function functionCallToCallback()
{
$this->functionWithCallback('id', 1);
}
public function functionCallToCallback2()
{
$this->functionWithCallback('name', 'Test', function ($query) use ($value) {
$query->where('name', 'like', '%' . $value . '%');
});
}
当我运行这段代码时,它抛出了一个异常
Error: Function name must be a string
包含此代码的行中抛出的错误when($callback, $callback($query))
。但是当我评论函数 functionCallToCallback
时,它抛出了另一个错误:
ErrorException: Undefined variable: query
有人知道怎么解决吗?谢谢
您正在调用回调而不是将回调传递给 when
:
when($callback, $callback($query))
when
的第二个参数是回调:
when($callback, $callback)
尽管您不需要对 when
的额外调用,因为您可以将两个回调都传递给对 when
:
$adminIds = Admin::when($callback, $callback, function ($query) use ($field, $value) { ... })
->pluck('id')->toArray();
"You may pass another closure as the third argument to the
when
method. This closure will only execute if the first argument evaluates asfalse
."
旁注:不确定 functionCallToCallback2
$value
的来源