Call by reference in Arrays
MM
- php
Hallo zusammen,
ich möchte ein Objekt in einen Array packen. An einer anderen Stelle wird es ausgelesen und verändert. Damit diese Änderung überall wirksam wird, möchte ich das Objekt als Refferenz (nicht Call by value) übergeben. Wie mache ich das?
Hier ein Beispiel:
<?php
class Test {
var $test;
}
// Objekt erzeugen und Wert setzen
$obj = new Test();
$obj->test = "Alter Wert";
// In Array speichern
$array = array();
array_push($array, $obj);
// Aus Array auslesen und neuen Wert setzen
$obj2 = $array[0];
$obj2->test = "Neuer Wert";
// Wert ausgeben
echo($obj->test);
?>
Unten sollte der neue Wert ausgegeben werden. Wird er aber nicht. Folglich ist das Objekt, das ich in den Array reinpacke nicht das selbe, wie das, was wieder raus kommt.
Ich habe auch schon (zugegebenermaßen recht willkürlich) ein paar & gesetzt. Ohne Erfolg. Wer kann helfen?!
Danke in Vorraus!
Hallo,
Stichwort: Das kaufmaennische Und (&).
Da schaust Du mal hier:
http://www.php-experts.de/showsource.php?id=9
Oder einfach googlen.. man findet etliche Treffer.
Gruesse
Chris
Hi,
oh, hatte deine letzte Zeile nicht gelesen..
Habe grad kein PHP laufen, aber wuerde es mal wie folgt versuchen:
(geanderte Zeilen sind mit "<==" markiert)
<?php
class Test {
var $test;
}
// Objekt erzeugen und Wert setzen
$obj = new Test();
$obj->test = "Alter Wert";
// In Array speichern
$array = array();
array_push($array, &$obj); <===
// Aus Array auslesen und neuen Wert setzen
$obj2 &= $array[0]; <===
$obj2->test = "Neuer Wert";
// Wert ausgeben
echo($obj->test);
?>
Hallo und danke!
Mittlerweile habe ich auch den wahren Fehler gefunden. Ich durchlaufe die Array-Elemente mit foreach. Hierbei wird eine Kopie des Arrays verwendet. Wenn ich eine for-Schleife verwende und dort expliziet ein =& verwende, geht's.
Hi,
oh, hatte deine letzte Zeile nicht gelesen..
Habe grad kein PHP laufen, aber wuerde es mal wie folgt versuchen:
(geanderte Zeilen sind mit "<==" markiert)<?php
class Test {
var $test;
}// Objekt erzeugen und Wert setzen
$obj = new Test();
$obj->test = "Alter Wert";// In Array speichern
$array = array();
array_push($array, &$obj); <===// Aus Array auslesen und neuen Wert setzen
$obj2 &= $array[0]; <===
$obj2->test = "Neuer Wert";// Wert ausgeben
echo($obj->test);
?>
Hi,
Mittlerweile habe ich auch den wahren Fehler gefunden. Ich durchlaufe die
Array-Elemente mit foreach. Hierbei wird eine Kopie des Arrays verwendet.
Wenn ich eine for-Schleife verwende und dort expliziet ein =& verwende,
geht's.
..sieh mal einer an.
Aber warum wird mit einer Kopie gearbeitet?
Das hiesse ja, dass man innderhalb einer foreach-Schleife das aktuelle
Element aus dem Array entfernen kann.. interessant.
Gruesse
Chris