例如,对于这样的父级:
class Music {
private $timbre; // This?
protected $timbre; // Or this?
public function getTimbre(){
return $this->timbre;
}
}在继承子对象中,从OO的角度来看,直接访问成员变量是可以的,还是最好使用getter/setter?
class PostPunk extends Music {
public function doSomethingTimbreRelated(){
$punk_timbre = $this->getTimbre(); // This?
$punk_timbre = $this->timbre; // Or this?
// ... do something ...
}
}我读到过让成员变量保持私有更有利于封装,但这在继承层次结构中真的很重要吗?
我意识到这很微不足道,但我在两种方式之间来回摇摆不定,所以我想选择一种方式
发布于 2019-04-05 16:51:11
经过一些研究,现在我明白了,使用getter/setter可以通过encapsulation.将松散耦合到父对象
在一个开发人员很少、类很简单的小项目中,这样做的好处并不明显。
但是,设想一个大型项目,其中包含许多继承类,以及使用getter/setter的外部类。
如果以后需要修改或添加一些业务逻辑到getter返回值,您将不得不重新连接所有继承者以使用getter而不是直接访问属性。
setter也是如此--也许您决定添加一些数据清理/验证。直接访问属性将绕过这些未来的改进。
打个比方:你不是让你的孩子免费使用你的钱包,而是强迫她向你要钱,然后你决定给她什么和多少。
https://stackoverflow.com/questions/55521709
复制相似问题