Referenzen in PHP5 eine Zumutung?
-
Hi,
ich verzweifle langsam wirklich an dieser Sprache.
Ich habe Folgendes probiert:
<? class meine_testklasse { public $instance_ = null; public function __construct (&$instance) { $this->instance_ = $instance; $this->instance_ = 555; } } $value = 444; $test = new meine_testklasse ($value); echo $value; // $value müsste 555 sein, ist aber 444 :-( ?>
Doch $value wird nicht auf 555 gesetzt, sondern bleibt genau wie vorher auf 444! Doch im Konstruktor sollte es auch 555 gesetzt werden per $this->instance_
Kann PHP5 das nicht, oder habe ich einen Fehler gemacht?
-
php'ler schrieb:
$this->instance_ = 555;
probier's so:
$instance = 555;
-
Undertaker schrieb:
php'ler schrieb:
$this->instance_ = 555;
probier's so:
$instance = 555;Müsste funktionieren, erörtert aber nicht die Problematik
PHP unterscheidet - wie fast alle "moderneren" Sprachen - zwischen Wert- und Referenztypen. Objekt z.B. werden grundsätzlich als Referenz übergeben. Primitive Typen wie int, float oder bool werden hingegen standardmäßig beim Zuweisen kopiert (deshalb nennt man sie Werttypen).
Daher bringt es dir nichts, $value als Referenz zu übergeben, wenn du diese Referenz wiederum in
$this->instance_ = $instance;
lediglich kopierst. Nach dieser Zeile hat $this->instance_ den Inhalt von $instance, verweißt jedoch nicht auf die gleiche Variable.
Um dies zu erreichen, muss auch die Zuweisung per Referenz erfolgen:
$this->instance_ = &$instance;
Dann funktioniert es.
-
man, is ja ganz schön kompliziert diese sprache, die angeblich so einfach ist...
-
In diesem Fall ist es einfach nur das zu erwartende Verhalten.
int a = 5; int b = a; b = 55;
Hier würdest du doch auch nicht erwarten, dass a = 55 wäre?