php static效率,php类中Static方法效率测试代码

本文通过测试比较了PHP中直接通过类名调用静态方法、通过实例调用静态方法以及访问非静态成员方法的效率。结果显示,直接调用静态方法的效率约为通过实例调用静态方法的56%-76%,而通过实例访问静态方法的效率略高于访问非静态方法。测试基于PHP 5.2.14和5.3版本,结果表明PHP 5.3版本中相关效率有所变化。
摘要由CSDN通过智能技术生成

有时需要做一些执行效率上的测试,今天做了一个static效率的测试。

类的定义如下:

复制代码 代码如下:

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

{

test::a();

}

$time2 = microtime(true);

for($i=0; $i

{

$obj->a();

}

$time3 = microtime(true);

for($i=0; $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
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懒得改服务器配置了,结果应该一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值