Eddy: Übertragung von Eigenschaften bei Klassen

Hallo SelfHTML-Forum,

ich habe etwas Verrücktes festgestellt. Ich habe ein Variable namens $AGV als ein Objekt definiert und habe deren Inhalt auf $agvH übertragen. Als ich nun Durchmesser-Werte von $agvH->Durchmesser änderte, änderten sich die Durchmesser-Werte von $AGV-Durchmesser auch! Ist das normal?

Ich möchte die Klasse AGV mehrmals verwenden und diese soll mehrmals verwendet werden können, sprich:

  
$AGV=new AGV;  
  
for($c=1;$c<=2;$c++)  
{  
  
$agvH=$AGV  
  
... Veränderung von Eigenschaften von $agvH und deren Ausgabe ...  
  
unset($agvH);  
  
}  

$agvH soll in jedem Zyklus mit den Standardwerten von $AGV geladen werden, das geht jedoch nicht wenn $AGV geändert wird. Nur $agvH soll verändert werden, $AGV jedoch nicht!

Kennt jemand Abhilfe?

ciao Eddy

  1. Hello,

    ich habe etwas Verrücktes festgestellt. Ich habe ein Variable namens $AGV als ein Objekt definiert und habe deren Inhalt auf $agvH übertragen. Als ich nun Durchmesser-Werte von $agvH->Durchmesser änderte, änderten sich die Durchmesser-Werte von $AGV-Durchmesser auch! Ist das normal?

    Wie hast Du das neue ('leere') Objekt angelegt?
    Wie hast Du denn den Inhalt übertragen?
    Zeig doch mal deine Clone-Methode dafür.

    Die PHP-eigene Clone-Methode ist noch nicht näher dokumentiert
    http://de2.php.net/manual/de/reflectionclass.clone.php

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Wie hast Du das neue ('leere') Objekt angelegt?
      Wie hast Du denn den Inhalt übertragen?
      Zeig doch mal deine Clone-Methode dafür.

      $agvH=$AGV;

      Das ist das was ich bisher gemacht habe.

      Danke für die Tipps.

      $agvH=clone $AGV; <<< das ist die Lösung!

      ciao Eddy

      1. Hello,

        Wie hast Du das neue ('leere') Objekt angelegt?
        Wie hast Du denn den Inhalt übertragen?
        Zeig doch mal deine Clone-Methode dafür.

        und als Lnk wollte ich eigentlich diesen hier beifügen *tztz*
        http://www.php.net/manual/en/language.oop5.cloning.php

        $agvH=$AGV;

        Würde die Objektreferenz kopieren, wozu auch immer man das braucht...

        Das ist das was ich bisher gemacht habe.

        Danke für die Tipps.

        $agvH=clone $AGV; <<< das ist die Lösung!

        Bitteschön :-)

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. Hi!

        $agvH=clone $AGV; <<< das ist die Lösung!

        Oder auch noch nicht. Das Clonen kopiert nur das Objekt und seine Eigenschaften. Wenn eine davon ein anderes Objekt referenziert dann wird beim Clonen nur die Referenz geklont, nicht aber das andere Objekt selbst. Von beiden Objekten, dem geclonten und dem ursprünglichen, zeigen nun dir entsprechenden Eigenschaften auf das selbe andere Objekt. Dieses und anderes Verhalten beim Clonen kann man beeinflussen, wenn man sich eine eigene __clone()-Methode in seine Klasse schreibt.

        Lo!

  2. Mahlzeit Eddy,

    Ist das normal?

    LMGTFY: Ja.

    Kennt jemand Abhilfe?

    s.o.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|