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


PHP Getter and Setter Performance. Is performance important here?

我的问题是关于性能vs设计。我读了很多关于PHP中的Getter和Setter的内容。而背后的思想,是非常好的和有用的(调试,消毒)。

所以我开始做一个基准测试:
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');
结果:

0.0000 Seconds (First call)
0.1428 Seconds (No Setter and Getter)
0.4366 Seconds (With Setter and Getter)

Setter和Getter需要3倍的时间。我的基准是错的吗?

我正在开发一个大型应用程序,其中有数千个这样的调用。如果性能很重要,拥有getter和setter仍然是一个好做法吗?

面对从数据库中获取数据并通过网络将响应发送回来的情况,数千个调用可能是不相关的。

你说"成千上万的电话"。您的代码可以对setter/getter进行100万次调用,并且只会减慢0.29秒。您是否有进行数百万次调用的代码,并且运行时可以注意到0.29秒的差异?

在进行优化之前,使用代码分析器(如XDebug)找出代码中的慢点:http://xdebug.org