2013-05-13 49 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

相關問題