闭包重载:是否可以在不执行PHP闭包的情况下检查它的参数数量


Closure overloading: is it possible to inspect the number of arguments a PHP closure has without executing it?

我想做什么

我想检查一个闭包(作为变量传递),以确定它需要多少个参数。从本质上讲,我想在传统意义上重载一个闭包,只是通过区别对待它。

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

如果可以更好地解释,请告诉我,以便进行编辑

背景信息

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

请注意

  • 我正在使用PHP5.3
  • 作为提醒,我不想执行该功能,因此无法使用func_num_args

带反射:

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