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.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileCré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;
?>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
1Fonctions avancées
Fonctions anonymesClosures et 'use'Fonctions fléchéesFonctions de rappelUtilisation de 'call_user_func'Fonctions variablesPassage par référenceFonctions récursivesRécapitulatif : Mélange de fonctions4Tableaux multidimensionnels
Créer un tableau 2DAccéder aux éléments d'un tableau 2DModifier les éléments d'un tableau 2DItérer avec des boucles imbriquéesTableaux associatifs 2DRécapitulatif : Exercice de grille simple2Manipulations avancées de tableaux
Ajouter avec 'array_push'Supprimer avec 'array_pop'Ajouter avec 'array_unshift'Supprimer avec 'array_shift'Fusionner des tableaux indexésFusionner des tableaux associatifsExtraire avec 'array_slice'Valeurs avec 'in_array'Clés avec 'array_search'Récapitulatif : Exercice Playlist3Tri des tableaux
Trier les tableaux indexés par ordre croissantTrier les tableaux indexés par ordre décroissantTrier les tableaux associatifs par valeurTrier les tableaux associatifs par cléTri par ordre naturelTri personnalisé avec 'usort'Récapitulatif : Tri d'un classement