• 技术文章 >后端开发 >php教程

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

    2016-05-17 09:22:52原创407
    类的定义如下:
    复制代码 代码如下:

    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
    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中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP Static
    上一篇:发款php蜘蛛统计插件只要有mysql就可用_php实例 下一篇:发款php蜘蛛统计插件只要有mysql就可用_php技巧
    大前端线上培训班

    相关文章推荐

    • 五分钟带你了解PHP中的魔术方法(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)• PHP中的命名空间定义与使用(实例详解)• 带你分清类中的构造函数与析构函数• 怎样去搞定PHP类的继承?(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网