答:call_user_func_array 效率偏低。
基准测试如下
对比范围
直接调用
变量函数调用
call_user_func 调用
call_user_func_array 调用
测试结果
我们可以看到,call_user_func_array 所用时间为:1.1608240604401s
测试过程
测试代码如下:
error_reporting(E_ALL | E_STRICT);
define('ITERATIONS', 2000000);
class Bench
{
private $bench_name;
private $start_time;
private $end_time;
public function start($name)
{
$this->bench_name = $name;
$this->start_time = microtime(true);
}
public function end()
{
$this->end_time = microtime(true);
echo "Call style: " . $this->bench_name . '; ' . ($this->end_time - $this->start_time) . " seconds". PHP_EOL;
}
}
class Test
{
public function test($a, $b, $c)
{
return;
}
}
$bench = new Bench();
$test = new Test();
$arg = [1, 2, 3];
$func_name = 'test';
$bench->start('normal');
for ($i=0; $i < ITERATIONS; ++$i) {
$test->test($arg[0], $arg[1], $arg[2]);
}
$bench->end();
$bench->start('var_function');
for ($i=0; $i < ITERATIONS; ++$i) {
$test->$func_name($arg[0], $arg[1], $arg[2]);
}
$bench->end();
$bench->start('call_user_func');
for ($i=0; $i < ITERATIONS; ++$i) {
call_user_func([$test, $func_name], $arg[0], $arg[1], $arg[2]);
}
$bench->end();
$bench->start('call_user_func_array');
for ($i=0; $i < ITERATIONS; ++$i) {
call_user_func_array([$test, $func_name], $arg);
}
$bench->end();