首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在父类中,我是否应该将类属性设为私有,强制继承者使用getter/setter?

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

Stack Overflow用户
提问于 2019-04-05 01:21:37
回答 1查看 71关注 0票数 0

例如,对于这样的父级:

代码语言:javascript
复制
class Music {
  private $timbre;   // This?
  protected $timbre; // Or this?

  public function getTimbre(){
    return $this->timbre;
  }
}

在继承子对象中,从OO的角度来看,直接访问成员变量是可以的,还是最好使用getter/setter?

代码语言:javascript
复制
class PostPunk extends Music {
  public function doSomethingTimbreRelated(){
    $punk_timbre = $this->getTimbre(); // This?
    $punk_timbre = $this->timbre;      // Or this?

    // ... do something ...
  }
}

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

我意识到这很微不足道,但我在两种方式之间来回摇摆不定,所以我想选择一种方式

EN

回答 1

Stack Overflow用户

发布于 2019-04-05 16:51:11

经过一些研究,现在我明白了,使用getter/setter可以通过encapsulation.将松散耦合到父对象

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

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

如果以后需要修改或添加一些业务逻辑到getter返回值,您将不得不重新连接所有继承者以使用getter而不是直接访问属性。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55521709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档