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 相关文章推荐
模板引擎smarty工作原理以及使用示例
May 25 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
php与阿里云短信接口接入操作案例分析
May 27 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 Rename 更改文件、文件夹名称
2011/05/24 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
DWR Ext 加载数据
2009/03/22 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
优秀管理者获奖感言
2014/02/17 职场文书
财政专业求职信范文
2014/02/19 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
MySQL触发器的使用
2021/05/24 MySQL
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
JavaScript中reduce()的用法
2022/05/11 Javascript