Maison >développement back-end >Problème PHP >Quelles sont les fermetures (fonctions anonymes) et comment les utiliser en PHP?

Quelles sont les fermetures (fonctions anonymes) et comment les utiliser en PHP?

Johnathan Smith
Johnathan Smithoriginal
2025-03-10 18:11:06675parcourir

Quelles sont les fermetures (fonctions anonymes) et comment les utiliser dans 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> 

Quels sont les avantages pratiques de l'utilisation des fermetures en PHP par rapport aux fonctions régulières?

Les fermetures offrent plusieurs avantages par rapport aux fonctions régulières en php:

  • Concision: pour les fonctions courtes et simples, les fermetures offrent une syntax plus compacte, une réduction du code réduit. Ceci est particulièrement utile pour les rappels ou les petites fonctions d'assistance uniquement utilisées une seule fois.
  • Fermetures lexicales: La possibilité d'accéder aux variables de leur portée environnante (portée lexicale) est un avantage clé. Cela permet de créer des fonctions qui maintiennent l'état sans recourir à des variables globales, conduisant à un code plus propre et plus maintenable.
  • Flexibilité: Les fermetures peuvent être facilement adoptées comme arguments à d'autres fonctions, ce qui les rend idéales pour des fonctions d'ordre supérieur (fonctions qui prennent d'autres fonctions comme arguments ou fonctions de retour). Cela permet des paradigmes de programmation fonctionnelle en php.
  • Réutilisabilité du code (dans un contexte limité): Bien qu'il ne soit pas aussi réutilisable que les fonctions nommées dans un sens plus large, les fermetures peuvent être réutilisées dans la même portée où elles sont définies, particulièrement utiles pour les tâches répétitives dans une fonction spécifique. 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> 

    Les fermetures de PHP peuvent-elles être utilisées avec d'autres fonctionnalités avancées telles que des rappels ou une manipulation d'événements?

    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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn