[PHP]OOP两类写法的性能对比

Posted Ethan Plan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PHP]OOP两类写法的性能对比相关的知识,希望对你有一定的参考价值。

 

php的OOP中我们有常见两种方法调用,对象调用和静态调用。

下面是一个简单的测试来比较它们的细微差异。

 

/**
 * 对象初始化 -> 调用;objectCall.php
 *
 * 测试调用50W次.
 *
 * @farwish
 */
class Test
{
    public $a; 
    
    public function __construct($a)
    {   
        $this->a = $a; 
    }   

    public function ab()
    {   
        return $this->a;
    }   
}

$obj = new Test(10);

for ($i = 0; $i < 500000; $i++) {

    //$obj = new Test(10);
    $obj->ab();
}

 

/**
 * 静态初始化 -> 调用;staticCall.php
 *
 * 测试调用50W次.
 *
 * @farwish
 */
class Tester
{
    public static $a; 

    public static function init($a)
    {   
        static::$a = $a; 
    }   

    public static function ab()
    {   
        return static::$a;
    }   
}

Tester::init(10);

for ($i = 0; $i < 500000; $i++) {

    //Tester::init(10);
    Tester::ab();
}

 

可以看到,上面两段程序,功能并无分别,测试点也很明确,对象调用和静态调用的差异有多大?

下面是执行结果,也许我们可以得出一些结论。

 

用户层层面对比,实例化较静态调用有一个微小的损失,单个例子看不太明显,但不同项目的应用和访问量差别很大,我们可以做的就是能静态实现就不写对象调用。这点还好说,创建一个对象并调用很正常,没什么大惊小怪。

如果把上面两处的注释打开,我们将得到下面的结果:

看的出来,我们放大了这个创建对象的时间消耗,所以要避免在循环中做一些原本可避免的损耗

 

:一个小的细节往往也能指引我们做的更好。

 

Link:http://www.cnblogs.com/farwish/p/6034671.html

以上是关于[PHP]OOP两类写法的性能对比的主要内容,如果未能解决你的问题,请参考以下文章

POST与GETREQUEST响应的php写法对比

PHP核心技术与最佳实践——全局浏览

php+mysql预查询prepare 与普通查询的性能对比

laravel 整合 swoole ,并简单 ab 测试对比性能以及在 PHPstorm 中利用debug调试配置swoole服务中的PHP代码

php和java整除对比

java golang oop 2文章片段