5

PHP 允许调用私有方法,只要它们来自同一类的实例。

PHP 文档是这样解释的:

相同类型的对象将可以访问彼此的私有成员和受保护成员,即使它们不是相同的实例。这是因为在这些对象内部时,特定于实现的细节是已知的。

这不会破坏封装吗?事实如何implementation specific details are known证明它是合理的?

ps 还有其他(面向对象的)语言可以做到这一点吗?

4

3 回答 3

1

作为对“这不会破坏封装吗?”的回答:

虽然OOP 定义中的封装原则有点模糊。我理解它的方式是将私有数据和逻辑保留在类的范围内。

封装用于隐藏类中结构化数据对象的值或状态,防止未经授权的各方直接访问它们。

我不知道 PHP、Java 和其他语言中类的这种行为是好是坏,但我认为它不会破坏类的封装

于 2013-05-13T10:31:29.573 回答
1

对于大多数语言来说都是如此,java你也可以这样做,这是因为对象来自同一个实例,它“知道”相同实例具有的所有属性

于 2013-05-13T10:21:07.000 回答
1

作为对post scriptum的回答,Delphi(所谓的“object pascal”)和 Lazarus(“free pascal”)都只允许在编写类实现的同一单元中访问私有属性。因此,您可以在一个单元中插入两个不同的类,并且它们可以访问彼此的私有属性。

如果两个类放在不同的单元中是不允许的(假设它类似于 PHP 中的命名空间)。

于 2013-05-13T10:22:30.093 回答