2013-05-13 45 views
5

只要PHP来自同一类的实例,它就会调用私有方法。为什么PHP允许从其他实例调用私有方法?

这是怎么the PHP docs解释它:

同一类型的对象将有机会获得对方的私有和保护成员,即使他们是不一样的情况。这是因为实现特定的细节在这些对象内部时是已知的。

这不破坏封装吗? implementation specific details are known这个事实是如何证明的呢?

p.s.是否有其他(面向对象)语言可以做到这一点?

+0

在我看来,它打破了oop规则,但是,这是你的问题吗? – Voitcus 2013-05-13 10:16:02

回答

1

这是大多数语言真实的,java你可以做到这一点, 这是因为对象是从同一个实例,它“知道”的所有属性相同的情况下,有

1

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

如果两个类放置在不同的单元中(假设它是像PHP中的命名空间那样),则不允许。

1

的回答为“不破此封装?”:

虽然Encapsulation principle in OOP定义有点模糊。我理解它的方式是将私有数据和逻辑保存在一个类的边界内。

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

我不知道在PHP,Java等语言类的这种行为是好是坏,但我不认为它打破了封装类的。

+0

当然。对于类成员来说,它将私有数据和逻辑保存在类的边界内。例如,成员,但情况并非如此。 – 2013-05-13 10:35:50

+1

@EmanuilRusev http://stackoverflow.com/a/4244833/679227 – 2013-05-13 10:47:53

相关问题