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 相关文章推荐
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
PHP学习之PHP运算符
Oct 09 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php结合正则获取字符串中数字
Jun 19 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 PHP
Yii框架模拟组件调用注入示例
Nov 11 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 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 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
PHP的引用详解
2015/02/22 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
php生成HTML文件的类方法
2019/10/11 PHP
JS与框架页的操作代码
2010/01/17 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
python获取从命令行输入数字的方法
2015/04/29 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
Python面向对象之Web静态服务器
2019/09/03 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
简述 Python 的类和对象
2020/08/21 Python
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
护理自荐信范文
2013/10/05 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
电子商务实训报告总结
2014/11/05 职场文书
学习雷锋主题班会
2015/08/14 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript