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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
php实现的CSS更新类实例
Sep 22 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
php中各种定义变量的方法小结
Oct 18 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
docker-compose部署php项目实例详解
Jul 30 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
PHP7 安装event扩展的实现方法
Oct 08 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下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
Python实现股市信息下载的方法
2015/06/15 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
基于python实现学生信息管理系统
2019/11/22 Python
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
计算机专业自荐信
2013/10/14 职场文书
高中毕业的自我鉴定
2013/12/09 职场文书
企业负责人任命书
2014/06/05 职场文书
设计专业自荐信
2014/06/19 职场文书
物理学专业求职信
2014/07/04 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python