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 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
dedecms模板标签代码官方参考
Mar 17 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
php实现简单的上传进度条
Nov 17 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
PHP中的事务使用实例
2015/05/26 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
python模糊图片过滤的方法
2018/12/14 Python
python3爬虫怎样构建请求header
2018/12/23 Python
python同步windows和linux文件
2019/08/29 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
电大物流学生的自我评价
2013/10/25 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
详解Python牛顿插值法
2021/05/11 Python
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers