PHP类中Static方法效率测试代码

2015-01-24信息快讯网
类的定义如下:
 
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面向对象法则
优化PHP程序的方法小结
PHP中几个常用的魔术常量
PHP教程之PHP中shell脚本的使用方法分享
php tp验证表单与自动填充函数代码
php模拟post行为代码总结(POST方式不是绝对安全)
PHP类的静态(static)方法和静态(static)变量使用介绍
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
PHP反转字符串函数strrev()函数的用法
PHP函数spl_autoload_register()用法和__autoload()介绍
Trying to clone an uncloneable object of class Imagic的解决方法
Uncaught exception com_exception with message Failed to create COM object
PHP中strtotime函数使用方法分享
在PHP中利用wsdl创建标准webservice的实现代码
PHP新手NOTICE错误常见解决方法
PHP中strtotime函数使用方法详解
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
PHP 函数执行效率的小比较
发款php蜘蛛统计插件只要有mysql就可用
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
php中去除所有js,html,css代码
PHP入门学习笔记之一
PHP 显示客户端IP与服务器IP的代码
php Notice: Undefined index 错误提示解决方法
使用VisualStudio开发php的图文设置方法
PHP Stream_*系列函数
PHP中的string类型使用说明
PHP STRING 陷阱原理说明
Google Voice 短信发送接口PHP开源版(2010.5更新)
php 模拟POST|GET操作实现代码
php set_magic_quotes_runtime() 函数过时解决方法
php中static静态变量的使用方法详解
php Static关键字实用方法
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
©2014-2024 dbsqp.com