忽略未使用的类型参数并移至下一步

时间:2018-03-23 15:12:06

标签: php function parameters

我一直在寻找很多,但我找不到任何解决方案。我也不确切知道这是否可能。

所以在这里我有2个案例可以做:

案例1:

$callback = function(Object $obj, $var) {
    // Do stuff
}

案例2:

$callback = function($var) {
    // Do stuff
}

现在我将调用这样的函数:

call_user_func_array($callback, [new Object, 'some text'])

但是现在有一个问题。在案例2中,$var将被视为对象参数。当不使用对象时,如何仅将字符串参数发送到调用?我不希望订单改变,对象必须是第一个。

P.S。我注意到这在Symfony框架中是可能的。我将继续研究Symfony如何做到这一点,任何提示都表示赞赏!

感谢阅读!

1 个答案:

答案 0 :(得分:1)

您可以使用反射。

示例:

function call(callable $callback, $var, object $obj = null)
{
    $callbackArguments = array();
    $parameters = (new ReflectionFunction($callback))->getParameters();
    foreach ($parameters as $parameter) {
        if ($parameter->getType() == 'object') {
            $callbackArguments[] = $obj;
        } else {
            $callbackArguments[] = $var;
        }
    }
    return call_user_func_array($callback, $callbackArguments);
}