Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Erstellen 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;
?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf