PHP中Getter和Setter执行的效率

PHP中Getter和Setter的效率

这个例子比较简单,你可以跳过。

考虑下面的PHP代码:我们可看到,使用Getter/Setter的方式,性能要比直接读写成员变量要差一倍以上。

<?php
//dog_naive.php
class dog {
public $name = "";
public function setName($name) {
$this-&gt;name = $name;
}
public function getName() {
return $this-&gt;name;
}
}
$rover = new dog();
//通过Getter/Setter方式
for ($x=0; $x<10; $x++) {
$t = microtime(true);
for ($i=0; $i<1000000; $i++) {
$rover->setName("rover");
$n = $rover->getName();
}
echo microtime(true) - $t;
echo "\n";
}
//直接存取变量方式
for ($x=0; $x<10; $x++) {
$t = microtime(true);
for($i=0; $i<1000000; $i++) {
$rover->name = "rover";
$n = $rover->name;
}
echo microtime(true) - $t;
echo "\n";
}
?> 

这个并没有什么稀,因为有函数调用的开销,函数调用需要压栈出栈,需要传值,有时还要需要中断,要干的事太多了。所以,代码多了,效率自然就慢了。所有的语言都这个德行,这就是为什么C++要引入inline的原因。而且Java在打开优化的时候也可以优化之。但是对于动态语言来说,这个事就变得有点困难了。
你可能会以为使用下面的代码(Magic Function)会好一些,但实际其性能更差。

class dog {
private $_name = "";
function __set($property,$value) {
if($property == 'name') $this->_name = $value;
}
function __get($property) {
if($property == 'name') return $this->_name;
}
}

动态语言的效率从来都是一个问题,如果你需要PHP有更好的性能,你可能需要使用FaceBook的HipHop来把PHP编译成C语言。

 

打赏此文

如果您觉得本站的内容对您有所帮助,您可以扫描下面的二维码小额支付请我喝杯茶,感谢!打赏记录
支付宝
微信
承诺:凡打赏捐助的朋友,留言备注自己的邮箱,在打赏捐助时间点的6个月内,本站会每周邮件推送原创专业技术博文,供大家学习和参考!

留下评论

All fields marked (*) are required