6

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

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

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

4

9 回答 9

6

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

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

看看 __get 和 __set 魔法方法,它会让你的代码保持干净,而且你不必因为不设置变量作用域而感到懒惰。

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

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

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

于 2010-12-10T20:57:42.657 回答
3

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

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

于 2010-12-10T20:52:21.063 回答
2

如果我是你,我不会打扰。你是对的,那种装饰只会把你的班级弄得一团糟。

于 2010-12-10T20:49:52.370 回答
2

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

于 2010-12-10T20:50:55.473 回答
2

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

于 2010-12-10T20:53:51.450 回答
2

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

如果是我,我会在没有 getter/setter 的情况下将它们公开,但在它们上方添加一条评论,类似于“考虑将这些设为私有并使用 getter/setter,具体取决于应用程序的范围和首选代码样式团队中的“

那样:

  1. 您的简历代码没有杂乱无章

  2. 他们明白你不仅懒惰而且无缘无故地公开一切

  3. 它表明,您不会盲目地遵循特定的风格,而是会在做出决定时考虑特定的应用程序。
于 2010-12-10T21:55:18.777 回答
1

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

如果没有,那么不要在这些上浪费你的时间。

如果您不以“特殊方式”使用它们,您将不会获得任何收益,甚至可能会减慢一切

于 2010-12-10T20:50:28.103 回答
0

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

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

请参阅: http: //php.net/manual/en/language.oop5.overloading.php

于 2010-12-10T20:52:51.780 回答