2013-05-13 4 views
5

PHPは、同じクラスのインスタンスから来ている限り、プライベートメソッドを呼び出すことができます。なぜPHPは他のインスタンスからプライベートメソッドを呼び出すことができますか?

これはthe PHP docsがそれを説明する方法です:彼らは同じインスタンスがなくても、同じタイプの

オブジェクトは、各プライベート他人と保護されたメンバーにアクセスできるようになります。これは、実装固有の詳細が、それらのオブジェクトの内部ですでに認識されているためです。

これはカプセル化を中断しませんか? implementation specific details are knownはそれをどのように正当化するのですか?

p.s.これを行う他の(オブジェクト指向の)言語はありますか?

+0

私の意見では、それはあなたの質問ですかoopのルールを破る? – Voitcus

答えて

1

これはjavaであなたもそれを行うことができ、ほとんどの言語に当てはまり、 これはオブジェクトが同じインスタンスからなので、それは同じインスタンスが答えたよう

1

を持っているすべてのプロパティを「知っている」でありますスクリプト後では、Delphi(いわゆる "オブジェクトパスカル")とLazarus( "free pascal")は、クラス実装がコード化されているのと同じ単位でのみプライベートプロパティにアクセスできます。したがって、1つのユニットの中に2つの異なるクラスを挿入することができ、それぞれのプライベートプロパティにアクセスすることができます。

2つのクラスが異なるユニットに配置されている場合は許可されません(これはPHPの名前空間のようなものです)。答として

1

「ではない、このブレークカプセル化していますか?」:

Encapsulation principle in OOP定義が少し曖昧ですが。私が理解しているのは、プライベートなデータとロジックをクラスの境界に保つことです。

カプセル化は、クラス内の構造化データオブジェクトの値または状態を非表示にし、権限のない当事者がそれらに直接アクセスするのを防ぐために使用されます。

PHP、Javaや他の言語でのクラスのこの行動が良いか悪いかどうかは知りませんが、私はそれは、クラスのカプセル化を壊すとは思いません。

+0

クラスメンバにとっては、 'クラスの境界にプライベートなデータとロジックを保持する '。しかし、メンバーの場合はそうではありません。 –

+1

@EmanuilRusev http://stackoverflow.com/a/4244833/679227 –

関連する問題