Übertragung von Eigenschaften bei Klassen
Eddy
- php
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
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
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
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
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!
Mahlzeit Eddy,
Ist das normal?
Kennt jemand Abhilfe?
s.o.
MfG,
EKKi