Manchmal ist ein Rückgabewert einer Funktion zu wenig. Mehrere Rückgabewerte gleichzeitig werden benötigt. Hier wäre es nun möglich, mit Arrays zu arbeiten, die die entsprechenden Werte bündeln.
Eleganter ist es jedoch die Möglichkeit des Aufrufes per Referenz zu nutzen. Normalerweise wird eine Variable bei einem Funktionsaufruf nämlich kopiert. Die Ursprungsvariable bleibt bei einer Änderung der Variable unberührt. Wird jedoch ein Aufruf per Referenz durchgeführt, so ändert sich die Ursprungsvariable mit.
In dem folgenden kleinen Programm demonstriert die Funktion mitReferenz()
den Aufruf per Referenz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php function ohneReferenz ($x) { $x++; } function mitReferenz (&$x) { $x++; } $x = 1; ohneReferenz($x); echo ($x); mitReferenz($x); echo ($x); ?> |
Die Ausgabe des Programmes ist zunächst 1
, da die Funktion ohneReferenz()
nur den Wert der Kopie von $x
ändert. Nach der Funktion mitReferenz()
ist jedoch der Wert von $x
dann 2
, da keine Kopie angelegt wurde.
Eine weitere Möglichkeit auf Variablen des Hauptprogrammes Einfluss zu nehmen, ist es, das Schlüsselwort global
zu verwenden. Anders als in anderen Programmiersprachen sieht eine Funktion die Variablen des Hauptprogrammes nicht, es sei denn dieses Schlüsselwort wird vor die Variable innerhalb der Funktion gesetzt.
Folgendes Beispiel zeigt den Zugriff auf die globale Variable $x
mit global
:
1 2 3 4 5 6 7 8 9 |
<?php function foo() { global $x; $x++; } $x = 0; foo (); echo ($x); ?> |
Die Ausgabe ist 1
, da die Funktion foo()
, die globale Variable $x
ändert.
Gleiches gilt auch umgekehrt: Variablen innerhalb von Funktionen können vom Hauptprogramm nicht aufgerufen werden. Muss dies geschehen, existiert nur die Möglichkeit die Variablen als Parameter zu übergeben oder einen Rückgabewert zu definieren.