Maison >développement back-end >Problème PHP >Quelles sont les fermetures (fonctions anonymes) et comment les utiliser en PHP?
Les fermetures, également appelées fonctions anonymes, sont des fonctions qui ne sont pas déclarées avec un nom. Ils sont définis à l'aide du mot-clé Function
suivi d'une paire de parenthèses pour les paramètres (le cas échéant) et d'une paire de contreventement bouclés contenant le corps de fonction. En PHP, les fermetures sont particulièrement puissantes car elles peuvent accéder aux variables de leur portée environnante, même après la fin de l'exécution de la portée environnante. Ceci est connu sous le nom de fermeture sur les variables .
Voici un exemple simple:
<code class="php"> & lt ;? php $ message = & quot; bonjour de l'extérieur! ";; $ closeture = function () use ($ message) {echo $ message; }; $ closeture (); // Sorties: Bonjour de l'extérieur! ? & gt; </code> pre> <p> Dans cet exemple, la fermeture <code> $ </code> est une fermeture. Il accède à la variable <code> $ message </code> qui est défini en dehors de la portée de la fermeture. Le mot-clé <code> use ($ message) </code> est crucial; Il indique explicitement la fermeture pour "capturer" la variable <code> $ message </code> à partir de la portée parent. Sans <code> use ($ message) </code>, PHP lancerait une erreur, car <code> $ message </code> ne serait pas disponible dans la portée de la fermeture. </p> <p> Vous pouvez également transmettre des arguments à une fermeture: </p> <pre class="brush:php;toolbar:false"> <code class="php"> & lt ;? php $ salut = function ($ name) {echo & quot; Hello, & quot; . $ name. & quot;! & quot ;; }; $ Greall (& quot; world & quot;); // Sorties: Bonjour, monde! ? & gt; </code>
Les fermetures offrent plusieurs avantages par rapport aux fonctions régulières en php:
Variables de passage aux fermetures:
Les variables sont passées aux fermetures à travers la liste des paramètres dans la définition de la fonction, tout comme avec des fonctions régulières. Pour les variables de la portée environnante, vous utilisez le mot-clé use
suivi d'une liste de variables enfermées entre parenthèses. Vous pouvez transmettre des variables par valeur (la valeur par défaut) ou par référence à l'aide de & amp;
avant le nom de variable dans l'instruction utilisez
.
<code class="php"> & lt ;? php $ x = 10; $ closeture = fonction ($ y) use ($ x) {return $ x $ y; }; Echo $ fermeture (5); // Sorties: 15 $ closetureByref = fonction (& amp; $ z) use (& amp; $ x) {$ x = 20; $ z = $ x * 2; }; $ w = 5; $ clarturebyref ($ w); Echo $ x; // Sorties: 20 Echo $ W; // Sorties: 40? & Gt; </code>
Variables de passage à partir de fermetures:
Vous pouvez renvoyer des valeurs des fermetures en utilisant l'instruction return
, tout comme dans les fonctions régulières. La valeur renvoyée peut ensuite être attribuée à une variable à l'extérieur de la fermeture.
<code class="php"> & lt ;? php $ closeture = function ($ a, $ b) {return $ a * $ b; }; $ result = $ fermeture (4, 5); // $ Le résultat sera de 20 résultats Echo $; ? & gt; </code>
Oui, les fermetures sont fréquemment utilisées avec des fonctionnalités avancées telles que des rappels et une gestion des événements en PHP. Ils sont parfaitement adaptés à ces scénarios en raison de leur flexibilité et de leur syntaxe concise.
Rappels: Les fermetures peuvent être transmises en tant que rappels aux fonctions qui attendent un argument appelable. Par exemple, des fonctions de tableau comme array_map
, array_filter
, et usort
prennent souvent des fermetures en tant que rappels pour traiter les éléments du tableau.
<code class="php"> & lt ;? php $ nombres = [1, 2, 3, 4, 5]; $ squaredNumbers = array_map (fonction ($ n) {return $ n * $ n;}, $ nombres); print_r ($ squaredNumbers); // Sorties: Array ([0] = & gt; 1 [1] = & gt; 4 [2] = & gt; 9 [3] = & gt; 16 [4] = & gt; 25)? & Gt; </code>
Dans des cadres ou des applications à l'aide de systèmes d'événements, les fermetures peuvent être enregistrées en tant qu'auditeurs d'événements. Lorsqu'un événement se produit, la fermeture correspondante est exécutée. Cela permet un code découplé et modulaire. Par exemple, dans un système d'événements hypothétique:
<code class="php"> & lt ;? php // Hypothetics Event System - Remplacez par votre système d'événements réel $ EventManager- & gt; ON ('userloggedIn', fonction ($ user) {// Effectuer des actions lorsque les utilisateurs journalisent dans echo & quot;. in. & quot ;;}); ? & gt; </code>
En résumé, les fermetures sont une fonctionnalité polyvalente et puissante en PHP, améliorant la lisibilité du code, la flexibilité et permet une utilisation efficace dans les modèles de programmation avancés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!