Gibt es eine Action äquivalent zu PHP __get()
und __set()
magischen Methoden? Ich möchte in der Lage sein, das Verhalten beim Abrufen/Festlegen von Elementvariablen zu überschreiben.Action entspricht PHP __get() und __set()
Antwort
Es gefunden.
die Proxy Klasse Erweiterung ermöglicht es Ihnen, dieses Problem zu lösen.
Es gibt leider keine solche Sache.
Alles, was Sie tun können, ist für die Existenz einer bestimmten Eigenschaft zu überprüfen, indem Sie entweder
myObject.hasOwnProperty (name)
auf einfache Objekte oder eine Variante von describeType() für Klasseninstanzen, zum Beispiel
describeType(myObject).accessor
zu Holen Sie eine XMLList aller Accessor-Methoden oder
zu Erhalte eine XML-Liste aller Variablen.
decribeType() ist jedoch in Bezug auf die Leistung ziemlich teuer, so dass es sich lohnt, eine Art Hash-Tabelle zu haben, um die Listen für jeden Typ zu speichern und nach Typen zu suchen, die bereits einmal beschrieben wurden.
Sie könnten auch versuchen, verwenden/catch-Blöcke um die Teile, in denen nicht definierte Eigenschaften zugegriffen werden könnte, aber das „frisst“ auch viel Leistung weg, wenn viele Fehler geworfen werden.
Wie ist das äquivalent zu '__get()' und '__set()'? In PHP fungieren diese als "catch all" für Member-Variablen. Wenn also eine Member-Variable nicht definiert ist, während ein Konsument versucht, auf sie zuzugreifen, werden '__get()' oder '__set()' aufgerufen. –
Mein schlechtes. Ich hätte das genauer prüfen sollen ... Ich habe meine Antwort entsprechend bearbeitet. – weltraumpirat