Neben der „normalen” Übergabe von Argumenten (Parametern) unterstützt PHP auch die Werteübergabe als Referenz. Eine Referenz ist im Grunde ein Verweis auf einen Speicherinhalt, über den Zugriffe erfolgen können. Dabei ist es möglich den Inhalt einer bereits definierten Variablen $a per referenzierung unter dem Synonym (alias) $b ansprechbar zu machen – dies geschieht durch die Verknüpfung des Variablennamen b mit dem Inhalt von a (durch die Anweisung $b = &$a;).
Im Gegensatz zur üblichen Form der Angabe von Parametern wirken sich Änderungen von – per Referenz übergebenen – Parameter-Werten, die innerhalb einer Funktion erfolgen nicht allein auf den funktionsinternen Bereich aus, sondern sie verändern den referenzierten Speicherbereich. Dies wirkt sich damit auf alle diesen Speicherbereich referenzierenden Variablen aus, obwohl tatsächlich nur an einer einzigen Stelle der Inhalt eines Speicherbereichs verändert wird. Eine Funktion kann auf diese Weise ihre Parameterwerte verändern. Auch Funktionen, die einen Funktionswert liefern können diesen Ergebniswert per Referenz zurückliefern.
<?php // Funktionsdefinition: Der Parameter mit Namen argument wird bei einem // Aufruf grundsätzlich als referenziertes Argument angesehen function refargs (&$argument) { // Folgende Veränderung des Parameters wirkt sich auf alle // referenzierenden Variablen aus, da der durch die Referenzen // addressierte Speicherbereich verändert wird. $argument = 'blau'; } // Variable initialisieren $farbe = 'rot'; // Funktionsaufruf unter Angabe der Variablen farbe // Hier ist die Angabe als Referenz nicht nötig, da die Funktion durch // die Art ihrer Definition immer eine Referenz annimmt. refargs ($farbe); // Ausgabe des (nun geänderten) Inhalts echo 'Farbe: ' . $farbe . '<br>'; // Alternativ ist auch folgende Implementierung möglich // Hier wird der Parameter standardmäßig nicht als Referenz, sondern // als normale Variable gewertet. function refargs2 ($argument) { $argument = 'gelb'; } // Durch folgenden Funktionsaufruf erreicht man aber ebenfalls eine // referenzierte Verarbeitung. refargs2 (&$farbe); // Wiederum Ausgabe des Inhalts echo 'Farbe: ' . $farbe . '<br>'; // Achtung: Nur Variablen können als Referenz übergeben werden! // Die Angabe von Konstanten, wie beispielsweise mit dem Aufruf // refargs ('gruen'); ist nicht möglich. // Die nächste Funktion liefert eine Referenz auf das dritte Element // des ihr übergebenen Arrays. Der Parameter wird in Kopie an die // Funktion übergeben und nicht als Referenz. function &refreturn ($parameter) { // Beachten Sie, dass die zurückzuliefernde Referenz in Klammern // stehen muss, da der dort stehende Ausdruck sonst zu einem // Ergebniswert ausgewertet wird und das Ergebnis als neuer // Speicherinhalt erzeugt wird. In diesem Fall wird eine Referenz // auf den neu entstandenen Inhalt zurückgegeben. return ($parameter[2]); } // Array mit Werten initialisieren $elemente = array (1, 2, 3, 4, 5); // Funktion aufrufen $auswahl = &refreturn ($elemente); // Lesender Zugriff auf das gelieferte Element echo 'Element: ' . $auswahl . '<br>'; // Änderung des referenzierten Wertes $auswahl = 0; // Ausgabe des geänderten Wertes echo 'Element: ' . $auswahl . '<br>'; // Zur Kontrolle noch das Array ausgeben. Das referenzierte Element hat // sich auch hier erwartungsgemäß geändert. print_r ($elemente); ?>
Farbe: blau
Farbe: gelb
Element: 3
Element: 0
Array
(
[0] => 1
[1] => 2
[2] => 0
[3] => 4
[4] => 5
)
Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr
von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortetHallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr
von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortetMein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr
von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 AntwortHallo,
am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr
Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr
von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 AntwortHallo,
ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr
Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr
von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 AntwortenHallo Alex,
die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr
¬ Menu
¬ Gratis Download
¬ Tutorials
¬ Seminare
¬ Yoga
¬ Insolvenzrecht
¬ News
15.08.2008Schleifen in PHP: Die While-Schleife » mehr 13.08.2008Nutzung von Variablen unter PHP: Definition, Sichtbarkeit und vordefinierte Variablen » mehr 11.08.2008Ausgabe von Datum und Zeit mit PHP nach Konvertierung in ein String » mehr Eine vollständige News-Liste ist auf der News-Seite zugänglich.
¬ Foren
¬ Buchtipp

PHP 5.3 & MySQL 5.1, m. DVD-ROM
Weitere PHP Bücher finden Sie unter PHP Literatur