获取类方法的参数数量

时间:2014-04-22 10:59:49

标签: php function oop reflection

我知道:

function params($fn) {
    $R = new ReflectionFunction($fn);
    return $R->getNumberOfParameters();
}

返回函数可以接受的参数个数,但是如何对类中存在的方法执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以通过接受callable

来扩展该功能
function params(callable $fn)
{
    if (is_string($fn) || $fn instanceof \Closure) {
        $r = new ReflectionFunction($fn);
    } elseif (is_array($fn)) {
        if (is_object($fn[0])) {
            $c = new ReflectionObject($fn[0]);
        } else { // assume string
            $c = new ReflectionClass($fn[0]);
        }
        $r = $c->getMethod($fn[1]);
    }
    return $r->getNumberOfParameters();
}

params(['Foo', 'bar']); // get nr of arguments for Foo::bar()
params([new Foo, 'bar']); // get nr of arguments for $foo->bar()
params('foo'); // get nr of arguments for foo()
// ...

答案 1 :(得分:0)

您可以为您的函数添加一个新参数$ clazz,以便为您想知道参数数量的方法提供范围。除了使用ReflectionFunction之外,还可以使用ReflectionClass和ReflectionMethod。

function params($clazz, $method) { 
    $C = new ReflectionClass($clazz);
    $M = $C->getMethod($method);
    return $M->getNumberOfParameters();
}