Referenzübergabe
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy — Lektion 7 von 68.
Standardmäßig erhält die Funktion eine Kopie des Wertes dieser Variablen, wenn Sie eine Variable an eine Funktion in PHP übergeben. Das bedeutet, dass Änderungen innerhalb der Funktion die ursprüngliche Variable außerhalb der Funktion nicht beeinflussen.
Manchmal möchten Sie jedoch, dass eine Funktion die ursprüngliche Variable direkt ändert. Hier kommt die Übergabe per Referenz ins Spiel. Indem Sie ein kaufmännisches Und-Zeichen (&) vor den Parameternamen in Ihrer Funktionsdefinition setzen, weisen Sie 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
?>Beachten Sie, wie sich $value von 10 auf 20 geändert hat, obwohl wir nichts aus der Funktion zurückgegeben haben. Der Parameter &$number erstellt eine direkte Verknüpfung zur ursprünglichen Variable $value, was es der Funktion ermöglicht, diese direkt zu ändern.
Diese Technik ist besonders nützlich, wenn Sie eine Funktion benötigen, um mehrere Variablen zu ändern, oder wenn Sie mit großen Datenstrukturen arbeiten, bei denen das Kopieren ineffizient wäre.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachErstellen Sie eine Funktion namens updateInventory, die drei Parameter entgegennimmt: eine Referenz auf eine Mengenvariable (quantity), 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.
Sie erhalten drei Eingaben: die Anfangsmenge, den hinzuzufügenden Betrag und den zu entfernenden Betrag. Lesen Sie alle drei Eingaben ein, erstellen Sie eine Variable mit der Anfangsmenge, rufen Sie die Funktion updateInventory auf, wobei Sie die Menge als Referenz zusammen mit den Beträgen zum Hinzufügen und Entfernen übergeben, und geben Sie die aktualisierte Menge aus.
Eingabeformat: Drei Zeilen - die erste Zeile enthält die Anfangsmenge (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
Spickzettel
Standardmäßig übergibt PHP Variablen als Wert (eine Kopie) an Funktionen. Um die ursprüngliche Variable zu ändern, verwenden Sie die Referenzübergabe, indem Sie ein kaufmännisches Und-Zeichen (&) vor den Parameternamen setzen:
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Ausgabe: 20
?>Der Parameter &$number erstellt eine direkte Verknüpfung zur ursprünglichen Variable, wodurch die Funktion diese ändern kann, ohne einen Wert zurückzugeben. Dies ist nützlich, um mehrere Variablen zu ändern oder effizient mit großen Datenstrukturen zu arbeiten.
Probier es selbst
<?php
// Eingaben lesen
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Mengenvariable erstellen
$quantity = $initialQuantity;
// TODO: Erstellen Sie hier die Funktion updateInventory, die einen Referenzparameter entgegennimmt
// TODO: Rufen Sie die Funktion updateInventory mit der Menge als Referenz auf
// Die aktualisierte Menge ausgeben
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