关闭重载:是否可以检查PHP闭包的参数数量而不执行它?

时间:2012-03-07 18:11:15

标签: php closures overloading

我想做什么

我想检查一个闭包(作为变量传递)以确定它期望的参数数量。从本质上讲,我希望在传统意义上重写一个闭包,只需要对它进行不同的处理。

function someMethod(Closure $callback) {
    $varA;
    $varB;
    $varC;
    if($callback->getNumArgs() == 3) {
        $callback($varA, $varB, $varC);
    }
    else {
        $callback($varC, $varA);
    }
}

如果可以更好地解释这一点,请告诉我,以便进行修改。

背景资料

根据闭包的参数数量,我将调整它的调用方式。我需要这样做以通过循环来节省昂贵的迭代。

请注意

  • 我使用的是PHP5.3
  • 提醒一下,我不想执行该功能,因此无法使用 func_num_args

1 个答案:

答案 0 :(得分:10)

使用Reflection

$ref = new ReflectionFunction(function($foo, $bar) {});
echo $ref->getNumberOfParameters(); // 2