PHP-äquivalent Freund oder interne
Gibt es eine Entsprechung von "friend" oder "interne" in php? Wenn nicht, gibt es irgendein Muster zu Folgen, dieses Verhalten zu erreichen?
Edit:
Sorry, aber die standard-Php ist nicht das, was ich Suche. Ich bin auf der Suche nach etwas entlang der Linien von dem, was ringmaster hat.
Ich habe Klassen, die genau C-Stil-system fordert die back-end und dem jonglieren begonnen hat, zu schwerfällig. Ich habe Funktionen in Ein Objekt, die in Objekt B als parameter und den Aufruf einer Methode im Objekt B übergeben, die in sich selbst als argument. Der Endbenutzer könnte, rufen Sie die Methode in B und das system würde auseinander fallen.
InformationsquelleAutor der Frage smack0007 | 2008-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
PHP nicht jeden Freund unterstützen-wie Erklärungen. Es ist möglich, um dies zu simulieren mit dem PHP5 __get und __set-Methoden und der überprüfung eines backtrace nur für die erlaubt, Freund-Klassen, obwohl Sie den code zu tun, es ist eine Art von ungeschickt.
Gibt es einige Beispielcode und Diskussion über das Thema auf der PHP-Website:
(Code, beweist tsteiner auf nerdclub dot net auf bugs.php.net)
InformationsquelleAutor der Antwort ringmaster
Ist es auch möglich, Berechtigungen zu erhöhen, aka undichte Daten selektiv, mit einem händedruck und closures in php >=5.3.3.
Grundsätzlich die Interaktion geht: Klasse A hat eine öffentliche Methode, die akzeptiert, dass ein Klasse B Objekt, und fordert die B->grantAccess (oder was auch immer Ihre Schnittstelle definiert), übergeben Sie einen Verschluss. Die Schließung
use($that,$anythingelseyouneed)
wo $=$this, und alles, was Sie brauchen, um zu bestimmen, welche Eigenschaften werden darf zugegriffen werden. Der Verschluss hat ein argument - Eigentum zurückzugeben; wenn Sie eine Eigenschaft auf $, und alles ist cool, die Schließung gibt die Eigenschaft. Andernfalls gibt es ", oder wirft eine Ausnahme, oder vielleicht ein Standard-Wert.Klasse B->grantAccess akzeptiert ein callable und speichert es Sie in anderen Methoden zu entreißen private Eigenschaften der Schließung können durchgesickert sein. Machen Klasse B Standard-Konstruktor private. Konstruieren Sie ein B mit einer statischen factory-Methode, die eine Klasse-a-argument, um die handshake passiert.
Kernaussage hier: https://gist.github.com/mcamiano/00592fb400e5043d8acd
InformationsquelleAutor der Antwort jerseyboy
Ich bin mir ziemlich sicher, dass das, was Sie suchen ist "protected" oder "private", die vom Anwendungsfall abhängig sind.
Wenn Sie die Definition einer Funktion in einer Klasse, und Sie nur wollen, dass es verfügbar zu sich selbst, Sie definieren es so:
Wenn Sie die Definition einer Funktion in einer Klasse, die Sie wollen, zur Verfügung zu Klassen die von dieser Klasse Erben aus, aber nicht öffentlich verfügbar ist, bestimmte es so:
Ich bin mir ziemlich sicher, dass standardmäßig in PHP5 Funktionen sind öffentlich, so dass Sie nicht haben, verwenden Sie die folgende syntax, aber es ist optional:
Werden Sie immer noch zu instanziieren des Objekts, bevor Sie eine öffentliche Funktion. Also ich werde nur gründlich und lassen Sie Sie wissen, dass, um eine Funktion in eine Klasse ohne Instanzierung ein Objekt, sicher sein, verwenden Sie die folgende syntax:
Die Ihnen erlauben, verwenden Sie die Funktion nur durch Verweis auf die Klasse, wie folgt:
Andernfalls müssen Sie Folgendes tun:
InformationsquelleAutor der Antwort Robert Elwell