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 Scope 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 der 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.
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 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
Spickzettel
Das Schlüsselwort use ermöglicht es Closures, Variablen aus ihrem übergeordneten Gültigkeitsbereich zu erfassen:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Ausgabe: Welcome, Bob!
?>Sie können mehrere Variablen erfassen, indem Sie diese durch Kommas trennen: use ($var1, $var2).
Probier es selbst
<?php
// Eingaben lesen
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: Erstellen Sie eine anonyme Funktion, die den Rabattprozentsatz mit 'use' erfasst
// Die Funktion sollte einen Preisparameter entgegennehmen und den Endpreis nach dem Rabatt zurückgeben
// TODO: Rufen Sie den Closure mit dem Preis auf und speichern Sie 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