php__call()效率,PHP 的 call_user_func_array 方法是否效率很低?

答:call_user_func_array 效率偏低。

基准测试如下

对比范围

直接调用

变量函数调用

call_user_func 调用

call_user_func_array 调用

测试结果

bVYVFJ?w=1004&h=418

我们可以看到,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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值