是否可以将匿名函数作为参数传递,并让它立即执行,从而传递函数的return
值?
function myFunction(Array $data){
print_r($data);
}
myFunction(function(){
$data = array(
'fruit' => 'apple',
'vegetable' => 'broccoli',
'other' => 'canned soup');
return $data;
});
由于Array
类型提示而引发错误,抱怨正在传递的对象。好吧,如果我删除了类型提示,它当然会吐出Closure Object
,而不是我想要的结果。我理解我在技术上将Closure
的对象实例传递给myFunction
,但是,我已经确定我已经在其他地方看到过这种情况。这可能吗?如果是这样,我做错了什么?
为了便于讨论,我无法修改我通过闭包的功能。
tl; dr:如何将匿名函数声明作为参数传递,从而导致返回值作为参数传递。
PS:如果不清楚,所需的输出是:
Array
(
[fruit] => apple
[vegetable] => broccoli
[other] => canned soup
)
答案 0 :(得分:9)
你做不到。你必须先调用它。由于PHP还不支持闭包解引用,因此您必须先将其存储在变量中:
$f = function(){
$data = array(
'fruit' => 'apple',
'vegetable' => 'broccoli',
'other' => 'canned soup');
return $data;
};
myfunction($f());
答案 1 :(得分:9)
最近,我正在解决类似的问题,所以我发布的代码按预期工作:
$test_funkce = function ($value)
{
return ($value + 10);
};
function Volej($funkce, $hodnota)
{
return $funkce->__invoke($hodnota);
//or alternative syntax
return call_user_func($funkce, $hodnota);
}
echo Volej($test_funkce,10); //prints 20
希望它有所帮助。首先,我创建闭包,然后接受闭包和参数的函数,并调用其内部并返回其值。够了。
PS:感谢您的回答: answers
答案 2 :(得分:4)
您正在传递函数本身,而不是您注意到的结果。你必须立即执行这样的功能:
myFunction((function() {
return ...;
})(), $otherArgs);
PHP不支持这样的事情,所以你不得不将该函数分配给某个变量并执行它:
$func = function() { ... };
myFunction($func(), $otherArgs);