我知道:
function params($fn) {
$R = new ReflectionFunction($fn);
return $R->getNumberOfParameters();
}
返回函数可以接受的参数个数,但是如何对类中存在的方法执行此操作?
答案 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();
}