PHP:将匿名函数作为参数传递

是否可以将匿名函数作为参数传递,并立即执行,从而传递函数的值?return

function myFunction(Array $data){
    print_r($data);
}

myFunction(function(){
    $data = array(
        'fruit'     => 'apple',
        'vegetable' => 'broccoli',
        'other'     => 'canned soup');
    return $data;
});

这会由于类型提示而引发错误,并抱怨正在传递的对象。好吧,如果我删除类型提示,它当然会吐出来,而不是我想要的结果。我知道从技术上讲,我正在将对象实例传递给 ,但是,我几乎可以肯定我已经在其他地方看到了这一点。这可能吗?如果是这样,我做错了什么?ArrayClosure ObjectClosuremyFunction

为了便于讨论,我无法修改要将闭包传递给的函数。

tl;dr:如何将匿名函数声明作为参数传递,从而导致返回值作为参数传递。

PS:如果不清楚,所需的输出是:

Array
(
    [fruit] => apple
    [vegetable] => broccoli
    [other] => canned soup
)

答案 1

你不能。你必须先调用它。由于 PHP 还不支持闭包反引用,因此您必须先将其存储在变量中:

$f = function(){
    $data = array(
        'fruit'     => 'apple',
        'vegetable' => 'broccoli',
        'other'     => 'canned soup');
    return $data;
};
myfunction($f());

答案 2

最近,我正在解决类似的问题,所以我发布了我的代码,它按预期工作:

$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:答案多亏了这个答案:答案


推荐