获取类函数的参数数量

时间:2010-10-21 15:35:07

标签: php function

有没有办法检测类中函数的参数个数?

我想做的是以下内容。

$class = 'foo';
$path = 'path/to/file';
if ( ! file_exists($path)) {
  die();
}

require($path);

if ( ! class_exists($class)) {
  die();
}

$c = new class;

if (num_function_args($class, $function) == count($url_segments)) {
  $c->$function($one, $two, $three);
}

这可能吗?

3 个答案:

答案 0 :(得分:5)

使用反射,但这实际上是代码中的开销;并且方法可以具有任意数量的参数,而无需在方法定义中明确定义它们。

$classMethod = new ReflectionMethod($class,$method);
$argumentCount = count($classMethod->getParameters());

答案 1 :(得分:5)

要获取Function或Method签名中的参数数量,可以使用

示例

$rf = new ReflectionMethod('DateTime', 'diff');
echo $rf->getNumberOfParameters();         // 2
echo $rf->getNumberOfRequiredParameters(); // 1

要获取在运行时传递给函数的参数数量,可以使用

示例

function fn() {
    return func_num_args();
}
echo fn(1,2,3,4,5,6,7); // 7

答案 2 :(得分:3)

使用call_user_func_array代替,如果传递的参数太多,则会忽略它们。

演示

class Foo {
   public function bar($arg1, $arg2) {
       echo $arg1 . ', ' . $arg2;
   }
}


$foo = new Foo();

call_user_func_array(array($foo, 'bar'), array(1, 2, 3, 4, 5));

将输出

1, 2

对于动态参数,请使用func_get_args,如下所示:

class Foo {
   public function bar() {
       $args = func_get_args();
       echo implode(', ', $args);
   }
}


$foo = new Foo();

call_user_func_array(array($foo, 'bar'), array(1, 2, 3, 4, 5));

将输出

1, 2, 3, 4, 5