phpbar.de logo

Mailinglisten-Archive

AW: [php] verschachtelte objekte

AW: [php] verschachtelte objekte

Florian Kugler php_(at)_phpcenter.de
Tue, 15 May 2001 15:19:35 +0200


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