MM: Call by reference in Arrays

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!

  1. 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

    1. 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);
      ?>

      1. 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);
        ?>

        1. 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