我的问题是关于性能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