在OOP中调用函数是否很慢还是开销?

时间:2013-05-02 17:29:26

标签: php oop

我正在构建一个重复执行功能的应用程序。

例如:

$Class = new Class;
for($i; $i < 1000; $i++) {
    $Class->get_something();
}

我已经阅读了很多关于OOP的文章以及为什么它很慢,但我仍然不明白“慢”部分到底在哪里。人们继续使用世界“开销”,是加载实际的类?一旦我require一个类,当我调用函数或变量时它现在是相同的速度吗?

4 个答案:

答案 0 :(得分:2)

您正在触及在进行一次大型查询以获取数据或循环使用许多较小查询以接收数据之间的争论。 答案在于实现的具体细节。在某些情况下,一次又一次地调用一个函数会更快,而有时它会破坏你的性能。只是反复调用一个函数的“开销”是非常小的,这就是它的“胆量”。

答案 1 :(得分:1)

可以说一件事是你不应该在PHP中使用大量无用的getter,因为它确实可以减慢代码的速度。你为什么不亲自做基准测试,例如:

<?php

class test1{
    private $prop = 1;
    public function get_prop(){
        return $this->prop;
    }
}

class test2{
    public $prop = 1;
}

$t1 = microtime(true);
$obj1 = new test1();
for($i=0;$i<=1000000;$i++){
    $a = $obj1->get_prop();
}
echo 'test1, access with get_prop : '.(microtime(true) - $t1).'ms<br/>';

$t1 = microtime(true);
$obj2 = new test2();
for($i=0;$i<=1000000;$i++){
    $a = $obj2->prop;
}
echo 'test2, direct access to prop : '.(microtime(true) - $t1).'ms';

输出:

test1,使用get_prop访问:1.7691290378571ms

test2,直接访问prop:0.38315200805664ms

慢4倍以上!

答案 2 :(得分:1)

这是函数调用开销,但在正常情况下它可以忽略不计。这也适用于函数,而不仅仅是类方法。类方法和函数之间的开销差异更加微不足道。

避免在函数中移动代码并使用内联代码(如果要运行数千次)是有意义的。否则,您将不会注意到任何性能影响。

除非你真的需要,否则不要这样做,因为你最终会得到组织严密的代码

答案 3 :(得分:0)

与此主题相关的其他资源。静态方法似乎要慢得多。

Performance of static methods vs. functions