例如,像这样的父母:
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 ...
}
}
我已经读到保持成员变量私有对于封装来说更好,但是在继承层次结构中这真的很重要吗?
我意识到这是非常琐碎的,但是我在两种方式上都来回摇摆,所以我想以一种方式解决
答案 0 :(得分:1)
经过一番研究,现在我了解到使用吸气剂/设置剂可以通过封装促进松散耦合到父对象。
在一个几乎没有开发人员和简单类的小型项目中,这样做的好处并不明显。
但是,想象一个大型项目,其中包含许多继承的类,以及消耗getter / setter的外部类。
如果将来需要在getter返回的值上修改或添加一些业务逻辑,则必须重新连接所有继承程序,以使用getter VS直接访问属性。
设置者也一样-也许您决定添加一些数据清理/验证。直接访问属性将绕过这些将来的改进。
类比:您不是强迫孩子免费使用钱包/钱包,而是强迫她向您要钱,然后决定给她多少钱。