Bonjour,
Les closures qu’est-ce que c’est ?
Eh bien, ça dépend du langage. Dans un langage fonctionnel, c’est une fonction et son environnement. En PHP, c’est une fonction anonyme.
Dans la version 7.1 de PHP, on se rapproche d’une vraie closure grâce à « use ».
Ce qui m’intéresse dans les fonctions anonymes en PHP, c’est leur côté first class functions. C’est à dire qu’on peut les utiliser comme des objets et les affecter à des variables, les passer en paramètre à d’autres fonctions, etc.
Si vous vous êtes demandé comment les routeurs (réécriture d’url) font leur travail, la réponse est ici.
Par exemple comment je peux écrire la fonction get pour que le code ci-dessous marche ?
$routeur->get('/un/chemin', controleur()); $routeur->get('/un/autre/chemin', function(){return "coucou";});
Dans le premier cas, c’est facile, la fonction controleur s’exécute et retournera sûrement une chaîne de caractère qui sera reproduite à l’écran.
L’implémentation de get pourrait être la suivante :
function get($chemin, $resultat){ //quelques traitements if(is_callable($resultat)){ echo $resultat(); }else{ echo $resultat; } //d'autres traitements }
On peut facilement étoffer l’exemple avec de nouvelles fonctionnalités. Mais je vais m’arrêter là pour l’instant.