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 xp下安装pear
Dec 02 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
两种php实现图片上传的方法
Jan 22 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 PHP
PHP implode()函数用法讲解
Mar 08 PHP
Laravel手动返回错误码示例
Oct 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
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
Nginx实现反向代理
2017/09/20 Servers
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
细说javascript函数从函数的构成开始
2013/08/29 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
layui实现数据分页功能
2019/07/27 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python使用folium库绘制地图点击框
2018/09/21 Python
Numpy的简单用法小结
2019/08/28 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
python开发一款翻译工具
2020/10/10 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
单身旅行者的单身假期:Just You
2018/04/08 全球购物
专升本自我鉴定
2013/10/10 职场文书
个人委托书怎么写
2014/04/04 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
学习与创新自我评价
2015/03/09 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书