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

问题描述 投票:0回答:1

例如,对于这样的父母:

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

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

而且我意识到这是非常微不足道的,但我会两种方式来回做,所以我想在一个方向上安顿下来

php oop encapsulation
1个回答
1
投票

经过一些研究,现在我明白使用getter / setter可以通过封装促进与父对象的松散耦合。

在一个开发人员很少,课程简单的小项目中,这样做的好处并不明显。

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

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

同样适用于setter - 也许您决定添加一些数据清理/验证。直接访问这些属性将绕过这些未来的改进。

打个比方:你不是让你的孩子免费获得你的钱包/钱包,而是强迫她向你索要钱,然后你决定给她什么和多少钱。

© www.soinside.com 2019 - 2024. All rights reserved.