Referenzübergabe
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy. Lektion 7 von 68.
Standardmäßig erhält eine Funktion in PHP eine Kopie des Werts, wenn du ihr eine variable übergibst. Das bedeutet, dass Änderungen innerhalb der Funktion die ursprüngliche variable außerhalb der Funktion nicht beeinflussen.
Manchmal möchtest du jedoch, dass eine Funktion die ursprüngliche Variable direkt ändert. Hier kommt die Übergabe per Referenz ins Spiel. Indem du in deiner Funktionsdefinition ein kaufmännisches Und (&) vor den Parameternamen setzt, weist du PHP an, die tatsächliche Variable anstelle einer Kopie zu übergeben:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Ausgabe: 20
?>Beachte, wie sich $value von 10 auf 20 geändert hat, obwohl wir aus der Funktion nichts zurückgegeben haben. Der Parameter &$number stellt eine direkte Verbindung zur ursprünglichen Variable $value her und ermöglicht es der Funktion, sie direkt zu ändern.
Diese Technik ist besonders nützlich, wenn du eine Funktion benötigst, um mehrere Variablen zu ändern, oder wenn du mit großen Datenstrukturen arbeitest, bei denen das Kopieren ineffizient wäre.
Aufgabe
EinfachErstelle eine Funktion namens updateInventory, die drei Parameter übernimmt: eine Referenz auf eine Mengenvariable, einen hinzuzufügenden Betrag und einen zu entfernenden Betrag. Die Funktion soll die ursprüngliche Menge ändern, indem sie den ersten Betrag addiert und den zweiten Betrag subtrahiert.
Du erhältst drei Eingaben: die anfängliche Menge, den hinzuzufügenden Betrag und den zu entfernenden Betrag. Lies alle drei Eingaben ein, erstelle eine Variable mit der anfänglichen Menge, rufe die Funktion updateInventory auf und übergib dabei die Menge als Referenz zusammen mit den Hinzufüge- und Entfernebeträgen. Gib anschließend die aktualisierte Menge aus.
Eingabeformat: Drei Zeilen – die erste Zeile enthält die anfängliche Menge (eine Zahl), die zweite Zeile enthält den hinzuzufügenden Betrag (eine Zahl), die dritte Zeile enthält den zu entfernenden Betrag (eine Zahl)
Erwartete Ausgabe: Die aktualisierte Menge nach dem Hinzufügen und Entfernen
Probier es selbst
<?php
// Eingaben lesen
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Quantity-Variable erstellen
$quantity = $initialQuantity;
// TODO: Erstelle hier die updateInventory-Funktion, die einen Referenzparameter nimmt
// TODO: Rufe die updateInventory-Funktion mit der quantity per Referenz auf
// Gib die aktualisierte quantity aus
echo $quantity;
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Funktionen
Anonyme FunktionenClosures und 'use'Arrow FunctionsCallback-FunktionenVerwendung von 'call_user_func'VariablenfunktionenReferenzübergabeRekursive FunktionenRückblick: Funktions-Medley4Mehrdimensionale Arrays
Ein 2D-Array erstellenZugriff auf 2D-Array-ElementeÄndern von 2D-Array-ElementenIterieren mit verschachtelten Schleifen2D assoziative ArraysZusammenfassung: Einfache Gitter-Übung2Fortgeschrittene Array-Manipulationen
Hinzufügen mit 'array_push'Entfernen mit 'array_pop'Hinzufügen mit 'array_unshift'Entfernen mit 'array_shift'Indizierte Arrays zusammenführenAssoziative Arrays zusammenführenExtrahieren mit 'array_slice'Werte mit 'in_array'Schlüssel mit 'array_search'Rückblick: Playlist-Übung3Arrays sortieren
Indizierte Arrays aufsteigend sortierenIndizierte Arrays absteigend sortierenAssoziative Arrays nach Wert sortierenAssoziative Arrays nach Schlüssel sortierenNatürliche SortierungBenutzerdefiniertes Sortieren mit 'usort'Recap: Leaderboard-SortierungÜbe selbstständig: Online-PHP-Compiler