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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
php xml文件操作代码(一)
Mar 20 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
PHP session 会话处理函数
Jun 06 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
php微信开发之关键词回复功能
Jun 13 PHP
详解no input file specified 三种解决方法
Nov 29 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
php 代码优化之经典示例
2011/03/24 PHP
php二分查找二种实现示例
2014/03/12 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
Python集合操作方法详解
2020/02/09 Python
Django ModelForm操作及验证方式
2020/03/30 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
手机银行营销方案
2014/03/14 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
岳麓书院导游词
2015/02/03 职场文书
2016年学校招生广告语
2016/01/28 职场文书