Mailinglisten-Archive |
Ok, ich denke ich muß das Problem noch mal neu darstellen, ich hab noch so einiges probiert, und damit hat sich auch das Problem verlagert. Das ganze sieht bestimmt erstmal ziemlich unsinnig aus, aber das Verhalten von PHP ist mir rätselhaft... also verzeiht mir das kryptische Beispiel... ;-) Beispiellisting: ----------------------------------------------- class Container { var $elements = array(); var $prototype; function Container($prototype) { $this->prototype = $prototype; } function insert_element() { array_push($this->elements, $this->prototype); } function clear() { foreach ($this->elements as $key => $value) { $this->elements[$key]->clear(); } } } class Atom { var $foo = ""; function clear() { $this->foo = ""; } } $atom = new Atom(); $element = new Container($atom); $element->insert_element(); // das ist jetzt die kritische Stelle. Lasse ich diesen Methoden- // aufruf weg, klappt alles ........ $element->clear(); $container = new Container($element); $container->insert_element(); $container->insert_element(); $container->elements[0]->elements[0]->foo = "123"; print_r($container); ------------------------------------------------------------ Erklärung: Es gibt also das Objekt $container, das in seinem array elements wiederum andere Objekte ($element) vom Typ Container beherbergt. $element hat nun wieder ein Unterobjekt von Typ Atom, daß den Wert $foo beinhaltet. (kann mir jemand folgen?? ;-)) Nachdem ich nun per $container->elements[0]->elements[0]->foo = "123"; das $foo Property in $container->elements[0]->elements[0] gesetzt habe, sollte man doch meinen, daß $container->elements[1]->elements[0]->foo noch den alten wert hat. aber pustekuchen, daß wurde mit geändert. Lasse ich die Zeile $element->clear weg, funktioniert alles. Entschuldigt, daß ich euch mit so langen Listings belästige, aber vielleicht hat ja jemand ne Idee ;-)) Danke, Florian.
php::bar PHP Wiki - Listenarchive