Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 错误:函数名必须是带有闭包回调的字符串_Php_Laravel_Callback - Fatal编程技术网

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))时,在包含此代码的行中抛出的错误。但是,当我注释function
functionCallToCallback
时,它抛出了另一个错误:

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
函数,并像您一样更改了我的代码。成功了!谢谢