class A {
public $myPropertyOne = '';
public $myPropertyTwo = '';
...
}
我偏爱将这些成员设为私有,并为每个属性创建get/set方法。例如:
class A {
private $myPropertyOne = '';
private $myPropertyTwo = '';
public function getMyPropertyOne() {
return $this->myPropertyOne;
}
public function setMyPropertyOne($myPropertyOne) {
$this->myPropertyOne = $myPropertyOne;
}
public function getMyPropertyTwo() {
return $this->myPropertyTwo;
}
public function setMyPropertyTwo($myPropertyTwo) {
$this->myPropertyTwo = $myPropertyTwo;
}
}
考虑到一个类会有20个属性,我还需要添加40个方法。我担心这会减慢脚本的速度并且需要更多的内存(请记住,我将拥有几个这样的类)。
另一个解决方案可能是使用magic functions __set、__get,但我不想这么做,因为开发IDE中的代码完成将不建议对我很重要的属性。
如果这是一种编译语言(如C++),我就没有问题,并且会使用getter、setter的解决方案,但由于PHP是解释性语言,我希望我的脚本使用的RAM尽可能少,速度尽可能快。
谢谢你们提前的帮助,对于这个问题的任何想法都会非常感激!
我的看法
谢谢大家的回答,我想分享一下我的观点,以便有人寻找答案。
我不能完全同意那些说你不应该关心性能的人,因为我认为这是一个重要因素(至少对我来说),当我们处理解释性语言(如PHP)时,我们始终必须考虑内存和速度(这让我想起了我为DOS开发系统应用程序的时候,呵呵:)),而且你总是会受到CPU性能和总RAM数量的限制,因此如果你可以节省额外的字节,就会感到高兴。在PHP开发中,你有同样的情况,无论你添加多少服务器,用户数量都会更高,所以你必须决定是否要遵循经典/安全/适当的方法,还是避免这些并在速度或内存上获得一些收益。
所以...我认为在这里最好的方法是对所有成员使用公共访问,并避免使用getter/setter来访问所有属性,对于需要数据验证或初始化的属性,使用私有访问和get/set方法来设置值之前进行操作。
例如:
class B {
public $myPropertyOne = '';
public $myPropertyTwo = '';
private $myPropertyThree = array();
public function getMyPropertyThree() {
return $this->myPropertyThree;
}
public function setMyPropertyThree($val) {
if(!is_array($val)) {
return;
}
$this->myPropertyThree = $val;
}
}
感谢您抽出时间阅读我的问题!