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 相关文章推荐
用文本文件实现的动态实时发布新闻的程序
Oct 09 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
PHP积分兑换接口实例
Feb 09 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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 cookie 登录验证示例代码
2009/03/16 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
js实现文字截断功能
2016/09/14 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
一张图带我们入门Python基础教程
2017/02/05 Python
TensorFlow实现模型评估
2018/09/07 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
python导入坐标点的具体操作
2019/05/10 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
python 制作磁力搜索工具
2021/03/04 Python
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
DJI全球:DJI Global
2021/03/15 全球购物
仓管员岗位责任制
2014/02/19 职场文书
学习三严三实心得体会
2014/10/13 职场文书
颐和园导游词
2015/01/30 职场文书
雨花台导游词
2015/02/06 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
人民币使用说明书
2019/04/17 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书