Is there any chance that I can deduce PHP Closure parameters type information? Consider this example:
<?php
$foo = function(array $args)
{
echo $args['a'] . ' ' . $args['b'];
};
$bar = function($a, $b)
{
echo $a . ' ' . $b;
};
$closure = /* some condition */ $foo : $bar;
if(/* $closure accepts array? */)
{
call_user_func($closure, ['a' => 5, 'b' => 10]);
}
else
{
call_user_func($closure, 5, 10);
}
?>
I want to leave some freedom for user so he or she could decide which way is better to define a Closure that will be registered in my dispatcher - will it accept parameters in associative array or directly as Closure parameters. So, dispatcher need to deduce parameters of the passed Closure to determine which way should it call this Closure. Any ideas?
It would be much easier to have your function be able to accept different types of input.
For instance, in this case:
Use
reflection
, if you need to make decisions, based on code structure. In your caseReflectionFunction
andReflectionParameter
are your friends.Output:
Change definition to test:
Output: