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 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP中phar包的使用教程
Jun 14 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
php swoft框架实例用法
Dec 22 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
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
JS作用域链详解
2017/06/26 Javascript
vue二级路由设置方法
2018/02/09 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
Python中文字符串截取问题
2015/06/15 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
python解释器安装教程的方法步骤
2020/07/02 Python
flask框架中的cookie和session使用
2021/01/31 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
Linux Interview Questions For software testers
2013/05/17 面试题
创建青年文明号材料
2014/05/09 职场文书
超市开店计划书
2014/09/15 职场文书
污水处理保证书
2015/05/09 职场文书
校园开放日新闻稿
2015/07/17 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技