首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不使用setter和getter真的有错吗?

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

Stack Overflow用户
提问于 2009-04-30 18:19:16
回答 6查看 6.1K关注 0票数 16

我对PHP还是个新手。由于某些原因,在其他类型的编程语言(如JAVA )中,对每个变量使用setter和getter都没有问题,但是当我使用PHP编程时,可能是因为它太灵活了,所以感觉有点浪费时间。在大多数情况下,只需将类属性设置为public并像这样操作它们会感觉更简单。问题是,当我这样做的时候,我觉得我做错了什么,违背了面向对象的原则。

不使用setter和getter真的有错吗?为什么或者为什么不?你们大多数时候是怎么做到的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-30 18:31:20

不使用属性访问器的主要问题是,如果您发现以后需要将字段更改为属性-例如,为了使其成为子类中的计算属性-您会破坏API的客户端。对于一个已发布的库来说,这是不可接受的;对于一个内部库来说,只需要做相当多的工作来解决问题。

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

请注意,一些编程语言具有合成默认field+getter+setter的功能-- Ruby通过元编程来实现,C#具有自动实现的属性。Python完全避免了这个问题,因为它允许您覆盖属性访问,允许您将属性封装在需要它的子类中,而不必预先操心它。(这是我最喜欢的方法。)

票数 22
EN

Stack Overflow用户

发布于 2009-04-30 18:22:32

getters或setter的要点在于,您仍然可以在一个地方向字段的修改添加逻辑,而不是在想要修改或检索字段的所有地方添加逻辑。您还可以在类级别获得对字段的控制。

票数 17
EN

Stack Overflow用户

发布于 2009-04-30 18:51:08

我可能不会在这一点上得到太多好评,但就我个人而言,getter和setter对我来说就像是代码的味道。设计应该是行为驱动的,而不是数据驱动的。当然,这只是一种观点。如果您有一个依赖于另一个对象的特定数据字段的对象,这是非常紧密耦合的。相反,它应该依赖于该对象的行为,该行为远没有其数据那么脆弱。

但确实,像getter和setter这样的属性是直接依赖于字段的一步,正是出于这个原因。它不那么脆弱,并且松散了对象之间的耦合。

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

https://stackoverflow.com/questions/808348

复制
相关文章

相似问题

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