studyklar
IProg · Skript 5 · Abschnitt 4

Referenzen in PHP: ein Wert, zwei Namen

Normalerweise bekommt eine Funktion in PHP nur Kopien. Mit einer Referenz sprechen zwei Namen dieselbe Variable an. Hier steht, wie das geht und wozu man es braucht. Rechts zeigt eine Tabelle, welcher Name auf welchem Speicherplatz steht. Mit Weiter geht es Schritt für Schritt voran.

Worum es geht

Skript 05, Folien 13–15: Referenzen in PHP, Referenzparameter, Rückgabe von Referenzen.

Wie erreicht man, dass zwei Namen dieselbe Variable meinen? Und wie kann eine Funktion damit eine Variable des Aufrufers ändern?

Merke: Ein Speicherplatz ist die Stelle im Speicher, an der ein Wert liegt. Eine Variable ist ein Name für einen solchen Platz.

So gehen wir vor:

  1. Zuweisung ohne und mit & vergleichen.
  2. Referenzparameter: eine Funktion ändert die Variable des Aufrufers.
  3. Warum man keine Zahl als Referenz übergeben kann.
  4. Eine Funktion gibt eine Referenz zurück.
  5. Eine Klausurfrage dazu.

Ohne &: eine Kopie

$b = 1;$a = $b;$a = 2;echo "$a $b\n";
2 1

$a = $b; kopiert den Wert 1 aus $b auf einen eigenen Speicherplatz für $a. Danach haben die beiden nichts mehr miteinander zu tun.

Zeile 3 setzt $a auf 2. $b bleibt 1. Ausgabe: 2 1.

Mit &: dieselbe Variable

Skript · Folie 13

Referenzen in PHP erlauben das Ansprechen einer Variablen mit verschiedenen Namen. $a = &$b; – $a und $b verweisen auf den gleichen Speicherplatz.

$b = 1;$a = &$b;$a = 2;echo "$a $b\n";
2 2

& ist der Referenzierungsoperator. $a = &$b; kopiert nichts. Es macht $a zu einem zweiten Namen für den Speicherplatz von $b.

Zeile 3 schreibt 2 auf diesen gemeinsamen Platz. Darum sind jetzt beide 2. Ausgabe: 2 2.

Noch 11 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1Referenzen

zwei Namen, ein Speicherplatz

$b = 1;$a = $b;$a = 2;echo "$a $b\n";
LegendeZeilen des SchrittsDas Beispiel: $a wird auf $b gesetzt, danach auf 2. Die Speicherplätze folgen im nächsten Schritt.