【问题标题】:Closure overloading: is it possible to inspect the number of arguments a PHP closure has without executing it?闭包重载:是否可以在不执行 PHP 闭包的情况下检查其参数数量?
【发布时间】:2012-03-25 07:10:19
【问题描述】:

我想做什么

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

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

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

背景资料

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

请注意

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

【问题讨论】:

    标签: php closures overloading


    【解决方案1】:

    Reflection:

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

    【讨论】:

    • 噢!我一直忘记反思是多么有用。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2020-08-12
    • 2020-07-05
    • 2020-05-01
    相关资源
    最近更新 更多