Hallo.
Nocheinmal wende ich man an Euch
Ich verstehe folgende Aussage nicht:
Wovon ist gerade die Rede?
Obiger Code:
bezieht sich auf eine Klasse, richtig?
Wenn ja, warum sollte $a = 42 sein?
Sie wird später definiert.
Also müssen die Variablen ja Objekte sein die angelegt wurden.
Folglich nehmen Objekte, auch wenn sie vorher definiert werden,
die Werte an, welche durch andere Objekte springen können (wenn definiert)
und so einen Wert ändern, trotz das diese vorher definiert wurden ?!?
Oder wie jetzt?
Das bringt mich zum Grübeln...
Nocheinmal wende ich man an Euch
Ich verstehe folgende Aussage nicht:
Ausweg aus dem Referenzdilemma
Wie also kann man sicherstellen, daß eine Referenz auch als solche behandelt wird? In PHP gibt es dafür spezielle Syntax, bei der das Kaufmanns-Und den Referenz-Charakter einer Zuweisung oder einer Variablen-Betrachtung anzeigt:
Die beiden obigen Zuweisung bewirken gleichermaßen, daß jeweils beide Variablen nicht nur denselben Wert haben, sondern auch eine Wertänderung einer der Variablen automatisch die exakt selbe Wertänderung der anderen Variablen bewirkt. Die letzte Anweisung bewirkt folglich, daß alle drei Variablen den Wert 42 annehmen.
Auch bei Funktions- und Methodenaufrufen wird normalerweise Kopiersemantik angewandt. Um explizit Referenzsemantik zu fordern, stellt man hierbei bei einer Funktions-/Methodendefinition einer zu referenzierenden Parameter-Variablen ein Kaufmanns-Und voran:
Die Ausgabe obigen Codes ist natürlich 41, da nur die Funktion Minus den Wert der Variablen $var ändert. In Java wäre das nicht so offensichtlich, da hier u.U. eine Klassenvariable namens var existieren könnte, die implizit gemeint sein könnte. In PHP müßte man dann aber $this->var schreiben.
Unter 20.7.2 findet sich noch eine Übung zu komplexeren Anwendungen der Referenzsemantik.
Wie also kann man sicherstellen, daß eine Referenz auch als solche behandelt wird? In PHP gibt es dafür spezielle Syntax, bei der das Kaufmanns-Und den Referenz-Charakter einer Zuweisung oder einer Variablen-Betrachtung anzeigt:
PHP-Code:
$a = &$b;
$c =& $a;
$c = 42;
Auch bei Funktions- und Methodenaufrufen wird normalerweise Kopiersemantik angewandt. Um explizit Referenzsemantik zu fordern, stellt man hierbei bei einer Funktions-/Methodendefinition einer zu referenzierenden Parameter-Variablen ein Kaufmanns-Und voran:
PHP-Code:
function Plus($var) { $var++; }
function Minus(&$var) { $var--; }
$var = 42;
Plus($var);
Minus($var);
echo $var;
Unter 20.7.2 findet sich noch eine Übung zu komplexeren Anwendungen der Referenzsemantik.
Obiger Code:
PHP-Code:
$a = &$b;
$c =& $a;
$c = 42;
Wenn ja, warum sollte $a = 42 sein?
Sie wird später definiert.
Also müssen die Variablen ja Objekte sein die angelegt wurden.
Folglich nehmen Objekte, auch wenn sie vorher definiert werden,
die Werte an, welche durch andere Objekte springen können (wenn definiert)
und so einen Wert ändern, trotz das diese vorher definiert wurden ?!?
Oder wie jetzt?
Das bringt mich zum Grübeln...
Kommentar