2013-05-13 4 views
5

PHP würde Aufrufe an private Methoden zulassen, solange sie von Instanzen derselben Klasse stammen.Warum erlaubt PHP den Aufruf privater Methoden von anderen Instanzen?

Dies ist, wie the PHP docs es erklärt:

Objekte des gleichen Typs haben Zugang zu jedem anderen privaten und geschützten Mitglieder, obwohl sie nicht die gleichen Instanzen sind. Dies liegt daran, dass die implementierungsspezifischen Details bereits innerhalb dieser Objekte bekannt sind.

Brücht die Einkapselung nicht? Wie kann die Tatsache, dass implementation specific details are known es rechtfertigen?

p.s. Gibt es andere (objektorientierte) Sprachen, die das tun?

+0

Meiner Meinung nach bricht es die OOP-Regeln, ist dies jedoch Ihre Frage? – Voitcus

Antwort

1

Dies gilt für die meisten Sprachen, in java Sie es auch tun können, dies, weil das Objekt von der gleichen Instanz ist, „weiß“ die alle Eigenschaften gleichen Instanzen

1

Als Antwort auf die haben post scriptum, Delphi (sogenanntes "object pascal") und Lazarus ("free pascal") erlauben beide den Zugriff auf die privaten Eigenschaften nur in derselben Einheit, in der die Klassenimplementierung codiert ist. Sie können also zwei verschiedene Klassen innerhalb einer Einheit einfügen und haben Zugriff auf die privaten Eigenschaften der jeweils anderen Einheit.

Es ist nicht erlaubt, wenn zwei Klassen in verschiedenen Einheiten stehen (sagen wir mal, es ist so etwas wie ein Namespace in PHP).

1

Als Antwort auf „nicht diese Pause Kapselung?“:

Obwohl die Encapsulation principle in OOP Definition ein bisschen vage. So wie ich es verstehe, hält es private Daten und Logik in den Grenzen einer Klasse.

Die Kapselung wird verwendet, um die Werte oder den Status eines strukturierten Datenobjekts in einer Klasse zu verbergen und so den direkten Zugriff durch Unbefugte zu verhindern.

Ich weiß nicht, ob das Verhalten von Klassen in PHP, Java und anderen Sprachen gut oder schlecht ist, aber ich glaube nicht, dass dieEncapsulation der Klassen bricht.

+0

Sicher. Für Klassenmitglieder "hält es private Daten und Logik in den Grenzen einer Klasse". Zum Beispiel sollte dies jedoch nicht der Fall sein. –

+1

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

Verwandte Themen