1

我正在构建一个应用程序,它会重复一些功能。

例如:

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

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

4

4 回答 4

2

您正在触及一个非常古老的争论,即进行一个大型查询以获取您的数据,或者遍历许多较小的查询以接收它们。答案在于实现的细节。在某些情况下,一遍又一遍地调用一个函数会更快,而其他时候它只会破坏你的性能。一遍又一遍地调用函数的“开销”非常小,重要的是它的“胆量”。

于 2013-05-02T17:34:07.083 回答
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,直接访问道具:0.38315200805664ms

慢了 4 倍以上!

于 2013-05-02T17:39:04.543 回答
1

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

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

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

于 2013-05-02T17:52:32.260 回答
0

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

静态方法与函数的性能

于 2013-05-02T17:45:12.677 回答