首页 > 解决方案 > 在父类中,我是否应该将类属性设为私有,强制继承者使用 getter/setter?

问题描述

例如,有这样的父母:

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

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

而且我意识到这很微不足道,但是我有点前后摇摆不定以两种方式进行,所以我想以一种方式安顿下来

标签: phpoopencapsulation

解决方案


经过一番研究,现在我了解到使用 getter/setter 可以通过封装促进与父对象的松散耦合

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

然而,想象一个具有许多继承类的大型项目,以及消耗 getter/setter 的外部类。

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

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

类比:你不是让你的孩子自由使用你的钱包/钱包,而是强迫她向你要钱,然后你决定给她什么和多少钱。


推荐阅读