Php 错误:函数名必须是带有闭包回调的字符串
我正在尝试编写一个带有回调函数的函数。 这是我的回调函数Php 错误:函数名必须是带有闭包回调的字符串,php,laravel,callback,Php,Laravel,Callback,我正在尝试编写一个带有回调函数的函数。 这是我的回调函数 带有回调的公共函数($field,$value,Closure$callback=null) { $adminIds=Admin::when(!$callback,函数($query)use($field,$value){ $query->where($field,$value); })->当此行出现($callback,$callback($query))/*错误时*/ ->get()->pull('id')->toArray(); }
带有回调的公共函数($field,$value,Closure$callback=null)
{
$adminIds=Admin::when(!$callback,函数($query)use($field,$value){
$query->where($field,$value);
})->当此行出现($callback,$callback($query))/*错误时*/
->get()->pull('id')->toArray();
}
这就是对函数的调用在参数中有回调的函数
公共函数函数calltocallback()
{
$this->functionWithCallback('id',1);
}
公共函数函数calltocallback2()
{
$this->functionWithCallback('name','Test',function($query)use($value){
$query->where('name','like','%%.$value'%');
});
}
当我运行这段代码时,它抛出了一个异常
错误:函数名必须是字符串
当($callback,$callback($query))时,在包含此代码的行中抛出的错误。但是,当我注释functionfunctionCallToCallback
时,它抛出了另一个错误:
ErrorException:未定义变量:查询
有人知道怎么解决这个问题吗?谢谢您正在调用回调,而不是在时将回调传递给
:
when($callback, $callback($query))
$adminIds = Admin::when($callback, $callback, function ($query) use ($field, $value) { ... })
->pluck('id')->toArray();
的第二个参数是回调:
when($callback, $callback)
尽管您不需要在
时对进行额外调用,因为您可以在
时将两个回调传递给对的调用:
when($callback, $callback($query))
$adminIds = Admin::when($callback, $callback, function ($query) use ($field, $value) { ... })
->pluck('id')->toArray();
“您可以将另一个闭包作为第三个参数传递给when
方法。只有当第一个参数的计算结果为false
时,才会执行此闭包。”
旁注:不确定$value
在functionCallToCallback2
中来自何处对于第一个错误,您没有为第二个参数传递字符串:$this->functionWithCallback('id',1)
当
是要使用的默认回调时,的第三个参数,btw@GetSet第二个参数只是一个普通参数。它可以是任何东西如果它可以是任何东西,为什么会显式出现错误:错误:函数名必须是字符串
$callback
是您的第二个参数,但您通过将其定义为1
来调用它。糟糕的是,我读错了,@simpsons3我想把它分开,因为我想写一些对``functionWithCallback``函数的函数调用,比如函数calltocallback3
,函数calltocallback4
,。。。每个函数都可以有不同的方式来查询数据,这些数据可以写在$callback
@simpsons3中。这很好,当分开时,您可以保留,但其余答案仍然有效。您的问题是,在when()
调用中,您正在执行回调并将返回的结果(null
)作为第二个参数传入。您需要将回调函数本身作为第二个参数传入。啊,我误解了您的想法。我只是读了源代码中的when
函数,并像您一样更改了我的代码。成功了!谢谢