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

 更新时间:2010年10月17日 14:48:10   作者:  
因为有好几个项目等着做,又不是很急,再加上目前成型的那些框架多多少少用着总是有点不太如意,所以决定先自己写一个框架,然后再做项目。既然写框架,自然要经常做一些执行效率上的测试,今天做了一个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<$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懒得改服务器配置了,结果应该一样。

相关文章

  • php用户注册信息验证正则表达式

    php用户注册信息验证正则表达式

    各种网页脚本也都常用“正则表达式”(regular expression)对我们信息进行验证,判断是否合法,本文为大家介绍了php用户注册验证正则表达式,需要的朋友可以参考下
    2015-11-11
  • thinkphp3.0 模板中函数的使用

    thinkphp3.0 模板中函数的使用

    thinkphp3.0 模板中函数的使用,不是所有的变量都能使用函数
    2012-11-11
  • Php Cookie的一个使用注意点

    Php Cookie的一个使用注意点

    这里需要提醒大家注意的一点是,在 php 中, 如果你在当前页面设置了COOKIE,在 当前页面刷新 或 转向到其他页面之前, cookie 的设置结果不会生效(cookie未过期的情况下)。
    2008-11-11
  • 理解PHP5中static和const关键字的区别

    理解PHP5中static和const关键字的区别

    理解PHP5中static和const关键字的区别...
    2007-03-03
  • PHP自定义函数获取汉字首字母的方法

    PHP自定义函数获取汉字首字母的方法

    这篇文章主要介绍了PHP自定义函数获取汉字首字母的方法,涉及php针对汉字的编码转换与判断操作相关技巧,非常简单实用,需要的朋友可以参考下
    2016-12-12
  • php 字符串压缩方法比较示例

    php 字符串压缩方法比较示例

    php 提供的字符串压缩方法有很多,下面为大家比较下php字符串压缩方法,感兴趣的朋友可以参考下
    2014-01-01
  • 微盾PHP脚本加密专家php解密算法

    微盾PHP脚本加密专家php解密算法

    威盾PHP加密专家解密算法 By:Neeao ,碰到使用威盾PHP加密专家加密的代码,可以用下面的代码查看源文件。
    2010-10-10
  • 利用“多说”制作留言板、评论系统

    利用“多说”制作留言板、评论系统

    这篇文章主要介绍了利用“多说”制作留言板、评论系统的相关资料,需要的朋友可以参考下
    2015-07-07
  • php下判断数组中是否存在相同的值array_unique

    php下判断数组中是否存在相同的值array_unique

    今天在改一个N久以前写的程序 突然碰到一个问题 假设有一个数组$a中存在几个value 我如何判断这些value当中是否存在相同的值呢? 翻了好多资料,也问了兵哥哥,给我一些思路,想自己写来着~~~ 还是不肯放弃百度,最后搞了一次,居然找到这么一个函数 array_unique爽大了。
    2008-03-03
  • 理解php依赖注入和控制反转

    理解php依赖注入和控制反转

    这篇文章主要帮助大家理解php依赖注入和控制反转,感兴趣的小伙伴们可以参考一下
    2016-05-05

最新评论