PHP类中Static方法效率测试代码
程序员文章站
2023-10-17 21:58:57
类的定义如下: 复制代码 代码如下: class test { public static function a(){} public function b(){} } $...
类的定义如下:
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懒得改服务器配置了,结果应该一样。
复制代码 代码如下:
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懒得改服务器配置了,结果应该一样。
上一篇: Python算法之栈(stack)的实现
推荐阅读
-
php类中的$this,static,final,const,self这几个关键字使用方法
-
PHP类中Static方法效率测试代码
-
php面向对象类中的$this,static,final,const,self这几个关键字使用方法。
-
PHP类中Static方法效率测试代码
-
php类中的$this,static,final,const,self这几个关键字使用方法
-
php中静态方法static和非静态方法效率对照
-
php中静态方法static和非静态方法效率对照
-
php类中的$this,static,final,const,self这几个关键字使用方法
-
php面向对象类中的$this,static,final,const,self及双冒号 : 这几个关键字使用方法
-
php中静态方法static和非静态方法效率对比