静态方法与函数的性能

2022-08-30 09:06:44

在PHP中,(与我最初的想法不同)调用静态方法与简单函数之间存在开销。

在一个非常简单的工作台上,开销超过调用时间的30%(该方法只返回参数):

// bench static method
$starttime = microtime(true);
for ($i = 0; $i< 10*1000*1000; $i++)
    SomeClass::doTest($i);

echo "Static Time:   " , (microtime(true)-$starttime) , " ms\n";

// bench object method
$starttime = microtime(true);

for ($i = 0; $i< 10*1000*1000; $i++)
    $someObj->doTest($i);

echo "Object Time:   " , (microtime(true)-$starttime) , " ms\n";

// bench function
$starttime = microtime(true);

for ($i = 0; $i< 10*1000*1000; $i++)
    something_doTest($i);

echo "Function Time: " , (microtime(true)-$starttime) , " ms\n";

输出:

Static Time:   0.640204906464 ms
Object Time:   0.48961687088 ms
Function Time: 0.438289880753 ms

我知道实际时间仍然可以忽略不计,除非我实际上拨打了100万次,但事实是它在那里。

有人会愿意尝试解释幕后发生的事情吗?

更新:
- 添加了对象方法工作台


答案 1

显然,这一点在更高版本的PHP(5.5.12)中已经修复。

我运行了OP的代码(使用空方法),我得到了这些结果:

Static Time:   1.0153820514679 ms
Object Time:   1.100515127182 ms

编辑:八个月和一些版本之后...

有趣的是,Zend 和社区是如何在 PHP 的性能上努力工作的。


答案 2

推荐