Menu
Coddy logo textTech

Closures et 'use'

Fait partie de la section Logique & Flux du Journey PHP de Coddy — leçon 2 sur 68.

Par défaut, les fonctions anonymes ne peuvent accéder qu'aux variables qui leur sont transmises en tant que paramètres. Mais que se passe-t-il si vous avez besoin que votre fermeture (closure) accède à une variable de la portée environnante ? C'est là que le mot-clé use intervient.

Le mot-clé use permet à une closure de « capturer » des variables de son scope parent et de les utiliser à l'intérieur de la fonction :

<?php
$message = "Welcome";

$greeting = function($name) use ($message) {
    echo $message . ", " . $name . "!";
};

$greeting("Bob");  // Affiche : Welcome, Bob!
?>

Remarquez comment $message est défini en dehors de la fonction, mais en incluant use ($message) après la liste des paramètres, la closure peut accéder à cette variable et l'utiliser. Vous pouvez capturer plusieurs variables en les séparant par des virgules : use ($var1, $var2).

Cette fonctionnalité rend les closures bien plus puissantes, leur permettant de travailler avec des données de leur contexte environnant tout en conservant la flexibilité des fonctions anonymes.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Créez une fonction anonyme qui capture un pourcentage de remise à partir de la portée environnante en utilisant le mot-clé use. La fonction doit prendre un prix en paramètre et retourner le prix final après application de la remise.

Vous recevrez deux entrées : le pourcentage de remise et le prix d'origine. Lisez les deux entrées, créez une fermeture (closure) qui capture le pourcentage de remise, appelez la fermeture avec le prix, et affichez le prix final après remise.

Format d'entrée : Deux lignes - la première ligne contient le pourcentage de remise (un nombre), la deuxième ligne contient le prix d'origine (un nombre qui peut contenir des décimales)

Sortie attendue : Le prix final après application de la remise

Aide-mémoire

Le mot-clé use permet aux fermetures (closures) de capturer des variables depuis leur portée parente :

<?php
$message = "Welcome";

$greeting = function($name) use ($message) {
    echo $message . ", " . $name . "!";
};

$greeting("Bob");  // Affiche : Welcome, Bob!
?>

Vous pouvez capturer plusieurs variables en les séparant par des virgules : use ($var1, $var2).

Essayez vous-même

<?php
// Lire les entrées
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));

// TODO: Créer une fonction anonyme qui capture le pourcentage de remise en utilisant 'use'
// La fonction doit prendre un paramètre de prix et retourner le prix final après remise


// TODO: Appeler la closure avec le prix et stocker le résultat


// Afficher le prix final
echo $finalPrice;
?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux