4

什么是不在 php 中使用关键字 public、private、protected 的正当理由?

故事:我与一个团队开始了一个项目,该团队在他们的代码中积极使用访问修饰符(甚至明确地“公开”)并希望说服我也这样做。我总是发现这种东西在像 php 这样的动态语言中完全没用,但我意识到我的直觉在技术讨论中几乎不是一个论据。因此,我正在寻找一个可靠、清晰的解释,为什么访问修饰符在 php.ini 中是无用的(甚至是有害的)。

我知道一些类似的主题已经存在

但是我发布这个有几个原因

  • 我不是在问我是否应该使用“公共”。我已经不使用它了。
  • 我明确地不想听到为什么访问修饰符很好(我知道它们很糟糕,我只需要专家来确认)。
  • 如果您要告诉我“最佳实践”和“OOP 原则”,请不要打扰。

TIA

4

4 回答 4

9

在 php 中不使用关键字 public、private、protected 的正当理由?

于 2010-09-16T10:06:10.713 回答
8

private修饰符 - 恕我直言 - 被过度使用。它的问题是它无法扩展类。但更重要的是,它是一个概念,它引导人们编写面向类而不是面向对象的代码。

protected对属性不感兴趣。事实上,我认为它应该是唯一使用的范围。protected但是,方法通常很麻烦,因为它使测试变得更加困难。

于 2010-09-16T10:11:43.887 回答
4

mario nailed it (copied from the comments)

Access modifiers make sense in Java/C++ and compiled code in general, where they are enforceable. In uncompiled scripting languages they can easily be ripped out. Hence they should be considered just decorators, and thus pragmatically could just be implemented as coding convention. (See underscoritis in Python, and pretty much any other scripting language. PHP is pretty alone with its purposeless access decorators.)

You won't have much success convincing your teammates about the advantage of useful APIs over encapsulation by restrictiveness. The use of syntax-enforced access decorators is often cargo cult driven.

于 2010-09-16T11:17:31.263 回答
4

在像 PHP 这样的动态语言中,假定程序员知道代码是如何工作的。这意味着程序员知道要调用哪些方法,哪些不应该直接调用。

这类似于无类型变量:在有类型语言中,每个变量都是显式类型的,但在 PHP 中,假定程序员知道每个变量的类型。

于 2010-09-16T10:06:33.800 回答