Ojjekt-Referenzen in PHP4

Issy

Mitglied
Hallo!

Nun zu meinem Problem: Ich möchte ein Objekt als Referenz einen anderen Objekt übergeben. Wenn ich das Objekt nun in der Klasse abc ändere, dass wird das ursprüngliche Objekt $us nicht mit verändert. In PHP5 klappt das, aber nicht in PHP4.

PHP:
class user {
    var $id;
    function user($id) {
        $this->id=$id;
    }
    function printId() {
        echo $id;
    }
}

class abc {
    var $user;
    function abc($u) {
        $this->user=$u;
    }

    function setId2($id) {
        $this->user = $id;
    }
}

$id = 1;
$us = new user($id);
$abc = new abc($us);
$abc->setId2(2);

$us->printId(); // Die Ausgabe ist 1 anstatt 2 :-(

Was kann ich machen, damit ich diese Wirkung auch in PHP4 erreiche?
Vielen Dank für die Hilfe.
Mfg Issy.
 
PHP:
class user {
    var $id;
    function user($id) {
        $this->id=$id;
    }
    function printId() {
        echo $id;
    }
}

class abc {
    var $user;
    function abc(&$u) {
        $this->user =& $u;
    }

    function setId2($id) {
        $this->user = $id;
    }
}

$id = 1;
$us = new user($id);
$abc = new abc($us);
$abc->setId2(2);

$us->printId(); // Die Ausgabe ist 2 :)

Du musst die Variablen auch als Referenz zuweisen (das & ist entscheidend in PHP4). In PHP5 werden Objekte immer als Referenz zugewiesen.
 
Zuletzt bearbeitet:
Hallo,

es würde mich sehr verwundern, wenn PHP5 hier 2 ausgeben würde. Ändert man allerdings Zeile 7 von echo $id; nach echo $this->id; und Zeile 18 von $this->user = $id; nach $this->user->id = $id;, dann könnte es durchaus klappen.

Im Gegensatz zu PHP5 legt PHP4 sowohl bei der Parameterübergabe als auch bei Zuweisung von Objekten automatisch eine Kopie an. Will man mit Referenzen arbeiten, muss man dies explizit angeben. Dies geschieht mit dem Referenzoperator &, der als Präfix notiert wird. In diesem Fall:
PHP:
function abc(&$u) { // Übergabe per Referenz
    $this->user = &$u; // Zuweisung über Referenz
}
Somit referenziert dann $this->user auch tatsächlich das Objekt, auf das die übergebene Variable zeigt.

Grüße,
Matthias

<edit>
PHP:
$us->printId(); // Die Ausgabe ist 2 :)
Das bezweifle ich aus o.g. Gründen ;)
<edit>
 
Oh, sorry die Fehler von Zeile 7 und 18 waren Abtippfehler. Danke für eure Lösungen.

Es ist mal wieder typisch, wenn man auf PHP5 testund es auf PHP4 laufen soll.
Jetzt weiß ich, wie es sich mit den Referenzen verhält. ;-)

Vielen Dank.
 
Zurück