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 相关文章推荐
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
thinkPHP下ueditor的使用方法详解
Dec 26 PHP
php构造函数与析构函数
Apr 23 PHP
php生成二维码图片方法汇总
Dec 17 PHP
Yii全局函数用法示例
Jan 22 PHP
php 常用的系统函数
Feb 07 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python3操作mysql数据库的方法
2017/06/23 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
python如何实现代码检查
2019/06/28 Python
python中怎么表示空值
2020/06/19 Python
Django返回HTML文件的实现方法
2020/09/17 Python
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
手工社团活动方案
2014/02/17 职场文书
周年庆典主持词
2014/04/02 职场文书
学生安全责任书
2014/04/15 职场文书
工作收入住址证明
2014/10/28 职场文书
表扬稿格式范文
2015/01/16 职场文书
财产保全担保书
2015/01/20 职场文书
简爱电影观后感
2015/06/10 职场文书
2019财务转正述职报告
2019/06/27 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript