PHP类中Static方法效率测试代码

时间:2022-09-23 20:46:03

类的定义如下: 

复制代码代码如下:


class test 

public static function a(){} 
public function b(){} 

$obj = new test; 


比较以下几种情况 
test::a(); 
$obj->a(); 
$obj->b(); 
测试代码: 

复制代码代码如下:


$obj = new test; 
$test_times = 100; 
$times = 10000; 
$effi1 = array(); 
$effi2 = array(); 

while ($test_times-- > 0) 

$time1 = microtime(true); 
for($i=0; $i<$times; $i++) 

test::a(); 

$time2 = microtime(true); 
for($i=0; $i<$times; $i++) 

$obj->a(); 

$time3 = microtime(true); 
for($i=0; $i<$times; $i++) 

$obj->b(); 

$time4 = microtime(true); 
$effi1[] = ($time3 - $time2) / ($time2 - $time1); 
$effi2[] = ($time4 - $time3) / ($time3 - $time2); 

echo avg($effi1),"\n",avg($effi2); 


最后的avg是自定义的计算平均数的一个函数: 

复制代码代码如下:


function avg($arr) 

$result = 0; 
foreach ($arr as $val) 

$result += $val; 

$result /= count($arr); 
return $result; 


程序输出结果: 

复制代码代码如下:


PHP 5.2.14 
view sourceprint?1 0.76490628848091 
2 1.0699484376399 
view sourceprint?1 PHP 5.3 
view sourceprint?1 0.56919482299058<BR>1.1016495598611 


重复执行N(N>10)次,都与这个结果相差不大,说明: 
1、直接通过类名访问静态方法的效率是通过实例访问静态方法的76%,甚至用PHP5.3时只有56% 
2、通过实例访问静态方法的效率是访问非静态成员方法效率的106,在5.3版本变成110% 
3、假设PHP从5.2升级到5.3时通过类名访问静态方法的效率没有降低,那么通过实例访问函数的效率至少提高了35%。我没看过PHP源码,有研究过PHP源码的朋友希望能告诉我这个假设是否成立 (我想应该是成立的) 
说明:以上测试基于windows 7和php.exe,5.2.14使用了apache2.2测试结果没有区别,考虑到php.exe和通过web访问所执行的PHP核心是一样的,所以5.3懒得改服务器配置了,结果应该一样。