Closures und 'use'
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy — Lektion 2 von 68.
Standardmäßig können anonyme Funktionen nur auf Variablen zugreifen, die ihnen als Parameter übergeben werden. Aber was ist, wenn Ihr Closure auf eine Variable aus dem umgebenden Bereich zugreifen muss? Hier kommt das Schlüsselwort use ins Spiel.
Das Schlüsselwort use ermöglicht es einem Closure, Variablen aus seinem übergeordneten Gültigkeitsbereich „einzufangen“ und sie innerhalb der Funktion zu verwenden:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Ausgabe: Welcome, Bob!
?>Beachten Sie, wie $message außerhalb der Funktion definiert ist, aber durch das Einfügen von use ($message) nach der Parameterliste kann die Closure auf diese Variable zugreifen und sie verwenden. Sie können mehrere Variablen erfassen, indem Sie diese durch Kommas trennen: use ($var1, $var2).
Diese Funktion macht Closures wesentlich leistungsfähiger, da sie mit Daten aus ihrem umgebenden Kontext arbeiten können, während sie gleichzeitig die Flexibilität von anonymen Funktionen beibehalten.
Aufgabe
EinfachErstellen Sie eine anonyme Funktion, die einen Rabattprozentsatz aus dem umgebenden Bereich unter Verwendung des Schlüsselworts use erfasst. Die Funktion sollte einen Preis als Parameter entgegennehmen und den Endpreis nach Anwendung des Rabatts zurückgeben.
Sie erhalten zwei Eingaben: den Rabattprozentsatz und den ursprünglichen Preis. Lesen Sie beide Eingaben ein, erstellen Sie einen Closure, der den Rabattprozentsatz erfasst, rufen Sie den Closure mit dem Preis auf und geben Sie den Endpreis nach Abzug des Rabatts aus.
Eingabeformat: Zwei Zeilen - die erste Zeile enthält den Rabattprozentsatz (eine Zahl), die zweite Zeile enthält den ursprünglichen Preis (eine Zahl, die Dezimalstellen enthalten kann)
Erwartete Ausgabe: Der Endpreis nach Anwendung des Rabatts
Probier es selbst
<?php
// Eingaben lesen
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: Erstelle eine anonyme Funktion, die den Rabatt-Prozentsatz mittels `use` erfasst
// Die Funktion sollte einen Preis-Parameter entgegennehmen und den Endpreis nach Abzug des Rabatts zurückgeben
// TODO: Rufe die Closure mit dem Preis auf und speichere das Ergebnis
// Den Endpreis ausgeben
echo $finalPrice;
?>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