php - 不使用 setter 和 getter 真的错了吗?

标签 php oop

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

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

最佳答案

不使用属性访问器的主要问题是,如果您发现以后需要将字段更改为属性——例如,使其成为子类中的计算属性——您将破坏您的客户应用程序接口(interface)。对于已发布的图书馆,这是 Not Acceptable ;对于内部的,修复问题的工作量相当大。

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

请注意,某些编程语言具有合成默认字段+getter+setter 的功能——Ruby 通过元编程实现,C# 具有自动实现的属性。 Python 完全回避了这个问题,让您覆盖属性访问,让您将属性封装在需要它的子类中,而不必预先打扰它。 (这是我最喜欢的方法。)

关于php - 不使用 setter 和 getter 真的错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808348/

相关文章:

php - 如果路由不存在则重定向

php - 在 Laravel 5 中将所有 Http 请求重定向到 Https

php - 同步 Laravel Eloquent 实例

php - 将表单发布到更多 URL

c++ - 如何对 Singleton 类进行单元测试 - C++?

java - 将状态模式与虚拟代理一起使用是否有意义?

php - 填充多个表单 Symfony2

允许转换为 sql 的 PHP 规范模式

Ruby on Rails - 静态方法

java - 处理父类(super class)型的所有子类型