2010-12-30 13 views
0

Ich habe eine dynamische Klasse, die von $row->attributes() referenziert wird, die einige überladene (dynamische) Eigenschaften hat, z. $row->attributes()->property1.Attribute von dynamischen PHP-Objekten nicht setzen

Ich möchte Property1 aufheben. Ich habe versucht $row->attributes()->__unset("property1") und unset($row->attributes()->property1). Keine Freude.

Wer weiß, wie man das macht?

+0

Ich bin mir nicht sicher, wie gut eine Unset auf eine Objekteigenschaft aufrufen würde (oder auch wenn es möglich ist). Warum nicht einfach den Wert auf null setzen? Was ist der Grund, dass das Eigentum vollständig ausgelöscht werden muss? –

+0

Schreiben einer Funktion, die die Attribute eines XML-Tags in ein assoziatives Array konvertiert. Geben Sie dem Benutzer die Möglichkeit, einen Schlüssel für dieses Array festzulegen (aus einem Attributwert) und das Attribut aus diesem Array zu entfernen. – bcoughlan

+0

Verwenden Sie (oder erweitern?) 'SimpleXMLElement'? – salathe

Antwort

2

Es ist unklar, aus der Frage, ob Sie diesen Ansatz verwendet haben, wenn Sie haben, werde ich diese Antwort entfernen.

Werfen Sie einen Blick auf __unset, einfaches Beispiel ist:

class Foo 
{ 
    public function __unset($property) 
    { 
     unset($this->__my_property_holder[$property]); 
    } 
} 

Sie müssen einfach unset($row->attributes()->property1) tun, und es wird Foo->__unset('property1') tatsächlich aufrufen.

+0

Sehr schlau. Es ist fast wie Magie. +1 – Abinadi

+0

Während Ihre Antwort richtig ist, ist in diesem Fall die Klasse in den PHP-Quellcode (SimpleXMLElement) eingebaut, so dass ich sie nicht ändern kann. Vielleicht ist es ein Implementierungsfehler. – bcoughlan

Verwandte Themen