Is it possible to pass an anonymous function as an argument, and have it execute immediately, thus passing the function's return
value?
function myFunction(Array $data){
print_r($data);
}
myFunction(function(){
$data = array(
'fruit' => 'apple',
'vegetable' => 'broccoli',
'other' => 'canned soup');
return $data;
});
This throws an error due to the Array
type-hint, complaining of an object being passed. Alright, if I remove the type-hint, it of course spits out Closure Object
, rather than the results I want. I understand that I am technically passing an object instance of Closure
to myFunction
, however, I'm near certain that I've seen this accomplished elsewhere. Is this possible? If so, what am I doing wrong?
For the sake of this discussion, I cannot modify the function to which I'm passing the closure.
tl;dr: How can I pass an anonymous function declaration as an argument, resulting in the return value being passed as the argument.
PS: If not clear, the desired output is:
Array
(
[fruit] => apple
[vegetable] => broccoli
[other] => canned soup
)
You can't. You'd have to call it first. And since PHP doesn't support closure de-referencing yet, you'd have to store it in a variable first:
$f = function(){
$data = array(
'fruit' => 'apple',
'vegetable' => 'broccoli',
'other' => 'canned soup');
return $data;
};
myfunction($f());