在父类中,我应该将类属性设为私有,以强制继承者使用getters / setter方法吗?

时间:2019-04-04 17:21:37

标签: php oop encapsulation

例如,像这样的父母:

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 ...
  }
}

我已经读到保持成员变量私有对于封装来说更好,但是在继承层次结构中这真的很重要吗?

我意识到这是非常琐碎的,但是我在两种方式上都来回摇摆,所以我想以一种方式解决

1 个答案:

答案 0 :(得分:1)

经过一番研究,现在我了解到使用吸气剂/设置剂可以通过封装促进松散耦合到父对象。

在一个几乎没有开发人员和简单类的小型项目中,这样做的好处并不明显。

但是,想象一个大型项目,其中包含许多继承的类,以及消耗getter / setter的外部类。

如果将来需要在getter返回的值上修改或添加一些业务逻辑,则必须重新连接所有继承程序,以使用getter VS直接访问属性。

设置者也一样-也许您决定添加一些数据清理/验证。直接访问属性将绕过这些将来的改进。

类比:您不是强迫孩子免费使用钱包/钱包,而是强迫她向您要钱,然后决定给她多少钱。