PHP Getter和Setter性能.性能在这里很重要吗?

Chr*_*rdt 1 php performance benchmarking getter-setter

我的问题是关于性能与设计.我在PHP中对Getter和Setter有很多了解.而背后的想法是非常好的和有用的(Debugging,Sanitize).

所以我开始做基准测试:

class Foo {
    public $bar;

    public function __construct($bar) {
        $this->bar = $bar;
    }

    public function getBar() {
        return $this->bar;
    }

    public function setBar($bar) {
        $this->bar = $bar;
    }
}

$foo = new Foo(42);
Debug::ProcessingTimeSinceLastCall();

//Without Setter and Getter
for ($i = 0; $i < 1000000; $i++) {
    if ($foo->bar === 42) {
        $foo->bar = 43;
    } else {
        $foo->bar = 42;
    }
}
Debug::ProcessingTimeSinceLastCall('No Setter and Getter');

//With Getter and Setter
for ($i = 0; $i < 1000000; $i++) {
    if ($foo->getBar() === 42) {
        $foo->setBar(43);
    } else {
        $foo->setBar(42);
    }
}
Debug::ProcessingTimeSinceLastCall('With Setter and Getter');
Run Code Online (Sandbox Code Playgroud)

结果:

0.0000 Seconds (First call)
0.1428 Seconds (No Setter and Getter)
0.4366 Seconds (With Setter and Getter)
Run Code Online (Sandbox Code Playgroud)

Setter和Getter需要3倍的时间.我的Benchmark错了吗?

我正在开发一个大型应用程序,有数千个这样的调用.如果表现很重要,那么拥有吸气剂和制定者仍然是一个好习惯吗?

And*_*ter 5

面对从数据库中提取数据并通过网络发回响应,数以千计的调用可能无关紧要.

你谈到"成千上万的电话".你的代码可以对setter/getters进行一百万次调用,并且只能减慢0.29秒.你有没有进行数百万次调用的代码,并且有一个运行时间,你可以注意到0.29秒的差异?

在进行优化之前,找出代码中的慢点在哪里使用像XDebug这样的代码分析器:http: //xdebug.org

  • +1用于分析/跟踪.在您实际看到代码花费最多时间的数据之前,您实际上无法知道缓慢区域的位置,或者您将从变更中获得最大收益的位置. (2认同)
  • 谢谢,你睁开眼睛. (2认同)