call_user_func_array
在性能方面非常慢,这就是为什么在许多情况下您希望使用显式方法调用。但是,有时您想传递作为数组传递的任意数量的参数,例如
public function __call($name, $args) {
$nargs = sizeof($args);
if ($nargs == 0) {
$this->$name();
}
elseif ($nargs == 1) {
$this->$name($args[0]);
}
elseif ($nargs == 2) {
$this->$name($args[0], $args[1]);
}
#...
// you obviously can't go through $nargs = 0..10000000,
// so at some point as a last resort you use call_user_func_array
else {
call_user_func_array(array($this,$name), $args);
}
}
我会检查$nargs
最多 5 个(PHP 中的函数通常不太可能接受超过 5 个参数,因此在大多数情况下,我们将直接调用一个方法而不使用call_user_func_array
对性能有好处的方法)
的结果$class->method($arg)
与 相同call_user_func_array(array($class,'method'), array($arg))
,但第一个更快。