【问题标题】:Should I bother with getters and setters in PHP?我应该在 PHP 中使用 getter 和 setter 吗?
【发布时间】:2010-12-10 20:46:44
【问题描述】:

我正在 PHP 中创建一个新类。我预计这门课不会被延长。我是否应该将班级成员设为私有并实现 getter 和 setter 函数?

我的一部分认为这只是浪费时间,只会增加我的代码。

这门课是为了简历。我正在用代码编写它以展示我的编码风格。问题是雇主会希望看到 getter 和 setter,还是只会把事情弄得一团糟?

【问题讨论】:

  • 你能提供一些关于你的班级的信息吗?
  • 这是一份简历。我正在用代码编写它。问题是雇主会希望看到 getter 和 setter,还是只会把事情弄得一团糟?
  • 这对如何回答您的问题有很大影响;您可能需要编辑您的问题以添加该信息。
  • @mcWafflestix - 谢谢我刚刚做了!

标签: php getter-setter


【解决方案1】:

我不想再次重复这样的论点,即使您现在不期望继承,将来可能仍然需要它,但它们仍然是使用 getter 和 setter 的更多理由:

  • Getter 和 setter 可让您轻松实现属性验证
  • 您的代码将遵循良好的编码准则,因此其他人会更容易阅读。如果我遇到一个没有使用 getter 和 setter 的代码文件,我会非常怀疑它,必须仔细阅读很多遍。
  • 此外,这不仅是每个班级的决定,而且是您整个项目的决定。您是否想为某些您需要的类而不是其他一些类提供 getter 和 setter?我认为一致性很重要。
  • 有一些工具可以为您自动生成 getter 和 setter。请记住,您只编写了一次代码,但您阅读了很多次,

【讨论】:

  • 补充一点,即使是私有属性,也应该有 getter 和 setter。您的内部代码应该只有一个点可以从 & 读取和写入内部属性。
【解决方案2】:

查看 __get 和 __set 魔术方法,它可以让您的代码保持干净,而且您不必因为不设置变量 scopel 而感到懒惰。

public function __get($name)
{
  return $this->$name;
}

public function __set($name, $value)
{
  $this->$name = $value;
}

显然你会有更多细节,但这会处理你的访问器。

【讨论】:

  • 魔术方法很慢。这些不是正确的 getter 和 setter 的替代品。
  • 它们使代码更易于阅读,并且不会显着降低吞吐量。
【解决方案3】:

您可能永远不会知道将来不需要扩展该类。班级会做什么?它有多复杂?

封装是良好 OO 设计的一部分。但是好的 OO 设计并不是编程的目标。目标是让事情正常工作,并能够在需要时轻松修改。

【讨论】:

    【解决方案4】:

    如果我是你,我不会打扰。你是对的,那种装饰只会让你的课堂变得混乱。

    【讨论】:

      【解决方案5】:

      据我所知,您可以覆盖 __get 和 __set。 http://php.net/manual/en/language.oop5.overloading.php

      【讨论】:

      • 魔术方法很慢。这些不是正确的 getter 和 setter 的替代品。
      【解决方案6】:

      我喜欢将我的类中的属性设置为受保护或私有,然后使用 getter 和 setter。然后我在设置器中使用代码来确保属性值在可接受的范围内。我喜欢这种方法,因为我发现它使调试更容易,因为我始终可以确定正在设置一个可接受的值,或者正在引发异常。这也让我更有信心,当我在属性中保存的值周围传递对象时不会导致其他任何东西爆炸。

      【讨论】:

        【解决方案7】:

        如果是为了简历,他们很可能会像关心 getter/setter 这样的小细节一样(或更多)关心你的逻辑。

        如果是我,我会在没有 getter/setter 的情况下将它们公开,但在它们上方添加一条评论,说的内容类似于“考虑将这些设为私有并根据应用程序的范围使用 getter/setter 和团队首选的代码风格”

        这样:

        1. 你的简历代码没有杂乱

        2. 他们明白,您不仅 懒惰并公开一切 无缘无故

        3. 它显示了 盲目地追随一个特定的 风格,你会考虑特定的 申请作出决定。

        【讨论】:

          【解决方案8】:

          你想在片场做一些特别的事情还是得到(或只是其中一个私人)?

          如果没有,那就不要在这些上浪费时间了。

          如果你不以“特殊方式”使用它们,这样做你不会获得任何好处,甚至可能会减慢一切

          【讨论】:

          • 如果您将来需要对值做一些特别的事情,您可能会从中受益。
          【解决方案9】:

          如果您在设置或访问这些属性时不打算有特定的行为,那么它并不重要。

          如果您以后在访问或修改这些属性时需要具有特定行为,您始终可以重载 __set 和 __get 方法。

          见:http://php.net/manual/en/language.oop5.overloading.php

          【讨论】:

          • 魔术方法很慢。这些不是正确的 getter 和 setter 的替代品。
          猜你喜欢
          • 1970-01-01
          • 2017-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多