the PHP docs解释了这一点:
相同类型的对象可以访问彼此私有和受保护的成员,即使它们不是同一个实例。这是因为在这些对象内部已经知道实现特定的细节。
这不会破坏封装吗? implementation specific details are known
如何证明这一点的事实是什么?
P.S。还有其他(面向对象的)语言吗?
答案 0 :(得分:1)
对于大多数语言都是如此,java
你也可以这样做,
这是因为对象来自同一个实例,它“知道”相同实例具有的所有属性
答案 1 :(得分:1)
作为对 post scriptum 的回答,Delphi(所谓的“object pascal”)和Lazarus(“free pascal”)都允许仅在与其相同的单元中访问私有属性。类实现是编码的。因此,您可以在一个单元中插入两个不同的类,并且可以访问彼此的私有属性。
如果两个类放在不同的单元中是不允许的(假设它类似于PHP中的命名空间)。
答案 2 :(得分:1)
作为答案“这不会破坏封装吗?”:
虽然Encapsulation principle in OOP定义有点含糊不清。我理解它的方式是它将私有数据和逻辑保存在类的边界内。
封装用于隐藏类中结构化数据对象的值或状态,防止未授权方直接访问它们。
我不知道PHP,Java和其他语言中这种类的行为是好还是坏,但我认为它不会破坏类的封装。