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


Posted in PHP onOctober 17, 2010

类的定义如下:

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 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
php 全文搜索和替换的实现代码
Jul 29 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
php实现复制移动文件的方法
Jul 29 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
php blowfish加密解密算法
Jul 02 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 #PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 #PHP
php中去除所有js,html,css代码
Oct 12 #PHP
PHP入门学习笔记之一
Oct 12 #PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 #PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 #PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 #PHP
You might like
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
canvas的神奇用法
2017/02/03 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
iView框架问题整理小结
2018/10/16 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
RIP版本1跟版本2的区别
2013/12/30 面试题
考试作弊被抓检讨书
2014/01/10 职场文书
工作表现评语
2014/01/19 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
教师产假请假条
2014/04/10 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
地道战观后感500字
2015/06/04 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android