不使用setter和getter真的有错吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

我是PHP的新手。由于某些原因,在其他类型的编程语言(如Java)中,我对为每个变量使用setter和getter没有问题,但是当我用PHP编程时,可能是因为它非常灵活,感觉像是在浪费时间。大多数情况下,将类属性设置为公共属性并这样对它们进行操作比较简单。问题是,当我这样做的时候,我觉得我做错了什么,违背了OO原则。

不使用setter和getter真的有错吗?你们大部分时间都是怎么做的?

提问于
用户回答回答于

不使用属性访问器的主要问题是,如果发现以后需要将字段更改为属性(例如,使其成为子类中的计算属性),则会破坏API的客户端。对于一个已发表的库来说,这是不可接受的;对于内部库来说,只是大量的工作来修复一些东西。

对于私有代码或小型应用程序,只需对其进行扩展是可行的。IDE(或文本编辑器)将允许您生成访问器样板并使用代码折叠隐藏它。这可以说使得使用getter和setter在机械上相当容易。

请注意,有些编程语言具有综合默认字段+getter+setter-Ruby的特性,C#具有自动实现的属性。Python完全避开了这个问题,允许您覆盖属性访问,让将该属性封装在需要它的子类中,而不必预先处理它。(这是我最喜欢的方法。)

用户回答回答于

getter或setters的要点是,仍然可以将逻辑添加到对字段的修改中,而不是要修改或检索字段的每个位置。还可以在类级别上控制字段发生的情况。

扫码关注云+社区

领取腾讯云代金券