6

クロージャの外部で使用するためにクロージャが宣言されている引数の数をどのように決定できますか?例えば:

$myClosure = function($arg1, $arg2, $arg3){

}

$numArgs = someMagicalFunction($myClosure);
echo("that closure expects $numArgs arguments");

必要な機能を実行する機能はありますか?

4

1 に答える 1

9

反射を使用します。この記事を参照してください:http ://www.bossduck.com/2009/07/php-5-3-closures-and-reflection/

$func = function($one, $two = 'test') {
    echo 'test function ran'.PHP_EOL;
};
$info = new ReflectionFunction($func);
var_dump(
    $info->getName(), 
    $info->getNumberOfParameters(), 
    $info->getNumberOfRequiredParameters()
);

どちらが返されますか:

string(9) "{closure}"
int(2)
int(1)
于 2013-03-06T21:01:08.153 に答える