Table des matières
Qu'est-ce qu'une fermeture en PHP?
Comment use permet la portée lexicale
Règles d' use clés:
Exemple: valeur vs référence
Cas d'utilisation pratiques pour les fermetures et use
1. Fonctions de rappel avec contexte
2. Manipatives d'événements ou logique différée
3. Injection de dépendance sans classes
Pièges et meilleures pratiques courantes
Gotcha: liaison variable de boucle
Résumé
Maison développement back-end tutoriel php Master les fermetures de PHP et le mot-clé «utilisation» pour la portée lexicale

Master les fermetures de PHP et le mot-clé «utilisation» pour la portée lexicale

Aug 01, 2025 am 07:41 AM
PHP Functions

Les fermetures PHP avec le mot clé Utiliser permettent la portée lexicale en capturant les variables de la portée des parents. 1. Les fermetures sont des fonctions anonymes qui peuvent accéder aux variables externes via l'utilisation. 2. Par défaut, les variables utilisées sont passées par valeur; Pour les modifier à l'extérieur, utilisez et $ variable pour référence. 3. Les cas d'utilisation courants incluent les fonctions de rappel avec le contexte, l'exécution différée comme les gestionnaires d'événements et l'injection de dépendance sans classes. 4. Évitez les pièges communs tels que la capture variable inutile et la liaison variable de boucle incorrecte - bien que PHP lie correctement les variables de boucle utilisées par valeur par itération, contrairement à JavaScript. 5. Les meilleures pratiques incluent l'utilisation de la sémantique de valeur à moins que la mutation soit nécessaire, le choix des noms de variables clairs et le fait d'être prudent avec les références. Lorsqu'ils sont utilisés correctement, les fermetures améliorent la modularité et la lisibilité du code en encapsulant la logique avec un accès contrôlé à l'état externe.

Master les fermetures de PHP et le mot-clé «utilisation» pour la portée lexicale

Les fermetures de PHP - en particulier lorsqu'elles sont combinées avec le mot clé use - sont des outils puissants pour créer du code flexible et encapsulé. Bien qu'ils puissent sembler délicats au début, comprendre comment ils fonctionnent avec les modèles de code plus propres et plus maintenables.

Master les fermetures de PHP et le mot-clé «utilisation» pour la portée lexicale

Décomposons comment les fermetures fonctionnent en PHP, pourquoi l' use des mots clés compte et comment les utiliser efficacement.


Qu'est-ce qu'une fermeture en PHP?

Une fermeture est une fonction anonyme qui peut capturer des variables à partir de la portée environnante (entourée). Contrairement aux fonctions régulières, les fermetures peuvent "se souvenir" des variables même après la fin de l'exécution de la portée des parents.

Master les fermetures de PHP et le mot-clé «utilisation» pour la portée lexicale
 $ salutation = "bonjour";
$ sayhello = fonction ($ name) use ($ salutation) {
    echo "$ salutation, $ name! \ n";
};

$ Sayhello ("Alice"); // Sortie: Bonjour, Alice!

Ici, la fermeture utilise la variable $greeting à partir de la portée extérieure via le mot clé use .


Comment use permet la portée lexicale

Le mot clé use permet à une fermeture d' importer des variables de la portée des parents dans sa propre portée. C'est ce qu'on appelle la portée lexicale - la fermeture "se ferme" sur les variables qu'il fait référence.

Master les fermetures de PHP et le mot-clé «utilisation» pour la portée lexicale

Règles d' use clés:

  • Les variables sont copiées par valeur par défaut.
  • Pour modifier une variable à l'intérieur de la fermeture et refléter les modifications à l'extérieur, vous devez la transmettre par référence en utilisant & .
  • Vous ne pouvez pas utiliser $this dans une fermeture à moins que ce soit dans un contexte de classe (et même alors, il est automatiquement disponible).

Exemple: valeur vs référence

 $ count = 0;

// par valeur (par défaut)
$ incrémentablevalue = function () use ($ count) {
    Nombre $;
};

$ incrémentyValue ();
Echo $ Count; // toujours 0

// par référence
$ incmenmentByReference = function () use (& $ count) {
    Nombre $;
};

$ incrémentyreference ();
Echo $ Count; // maintenant 1

⚠️ Si vous avez besoin de la fermeture pour affecter l'état externe, utilisez toujours &$variable .


Cas d'utilisation pratiques pour les fermetures et use

Les fermetures brillent dans les scénarios où vous souhaitez encapsuler la logique avec une configuration ou un retard d'exécution .

1. Fonctions de rappel avec contexte

Lorsque vous passez des rappels, vous devez souvent inclure un contexte qui ne fait pas partie des arguments de fonction.

 fonction filterbyThreshold ($ items, $ min) {
    return array_filter ($ items, fonction ($ item) use ($ min) {
        Retour $ item> = $ min;
    });
}

$ nombres = [5, 10, 15, 20];
$ filtory = filterByThreshold ($ Numbers, 12);
// Résultat: [15, 20]

Ici, $min est transmis dans la fermeture par use , ce qui rend la logique filtrante propre et réutilisable.

2. Manipatives d'événements ou logique différée

Les fermetures peuvent capturer l'état d'environnement pour une exécution ultérieure.

 $ logger = fonction ($ message) {
    écho "[". Date ('ym-d'). "] $ message \ n";
};

$ onUserLogin = fonction ($ username) use ($ logger) {
    $ logger ("utilisateur '$ username' connecté.");
};

$ onUserlogin ("bob");
// Sortie: [2025-04-05] L'utilisateur «Bob» s'est connecté.

Même si le $logger original change plus tard, la fermeture maintient sa propre copie (ou référence).

3. Injection de dépendance sans classes

Parfois, vous n'avez pas besoin d'une classe complète - juste une unité de logique autonome avec des dépendances.

 fonction CreateMultiplier ($ factor) {
    Fonction de retour ($ Number) Use ($ Factor) {
        Retour $ numéro * $ facteur;
    };
}

$ Doubler = CreateMultiplier (2);
$ tripler = CreateMultiplier (3);

Echo $ Doubler (5); // 10
Echo $ tripler (5); // 15

Ce modèle est léger et lisible - parfait pour les fonctions utilitaires.


Pièges et meilleures pratiques courantes

  • use pas de variables inutiles - elle regroupe la fermeture et peut provoquer des fuites de mémoire.
  • Préférez la sémantique de valeur à moins que vous ayez explicitement besoin de modifier la variable extérieure.
  • Utilisez des noms de variables significatifs dans les fermetures - ils ne sont pas toujours évidents lors du débogage.
  • ? Soyez prudent avec les boucles - une erreur courante consiste à capturer les variables de boucle incorrectement.

Gotcha: liaison variable de boucle

 $ functions = [];
pour ($ i = 0; $ i <3; $ i) {
    $ functions [] = fonction () use ($ i) {
        Echo $ i. "\ n";
    };
}

foreach ($ fonctionne comme $ f) {
    $ f ();
}
// Sortie: 3, 3, 3 - pas 0, 1, 2!

Pourquoi? Parce que $i est utilisé par valeur une fois la boucle terminée (où $i === 3 ). Pour le réparer:

 pour ($ i = 0; $ i <3; $ i) {
    $ functions [] = fonction () use ($ i) {
        Echo $ i. "\ n";
    };
}

Attendre - même code? En fait, dans PHP, cela fonctionne correctement car chaque itération crée une nouvelle portée à use . Cela fait donc la sortie 0 , 1 , 2 . (Contrairement à JavaScript, PHP le gère mieux.)

Mais si vous modifiiez $i par référence ou que vous le réutilisiez, des problèmes pourraient encore survenir.


Résumé

  • Les fermetures sont des fonctions anonymes qui peuvent capturer des variables via use .
  • use des variables d'importation par valeur sauf si préfixées avec & pour référence.
  • Ils sont idéaux pour les rappels, la configuration et la logique encapsulante avec le contexte.
  • Soyez conscient de la portée, de la mutabilité et du comportement de boucle.

Utilisées judicieusement, les fermetures de PHP rendent le code plus expressif et modulaire - aucune classe requise.

Fondamentalement, n'oubliez pas: use donne à votre fermeture l'accès au monde extérieur, mais seulement ce que vous autorisez explicitement.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Résolution de problèmes complexes avec des fonctions récursives en php Résolution de problèmes complexes avec des fonctions récursives en php Aug 02, 2025 pm 02:05 PM

Les fonctions récursives sont un moyen efficace de résoudre des problèmes complexes en PHP, en particulier adaptés à la gestion des données imbriquées, des calculs mathématiques et des traversées du système de fichiers avec des structures auto-similaires. 1. Pour les tableaux imbriqués ou les structures de menu, la récursivité peut s'adapter automatiquement à n'importe quelle profondeur, se terminer par l'exemple de base (enfant vide) et développer la couche par couche; 2. Lors du calcul des séquences factorielles et de Fibonacci, la récursivité implémente intuitivement la définition mathématique, mais le Fibonacci naïf a des problèmes de performance et peut être optimisé par la mémoire; 3. Lors de la traversée du répertoire, la récursivité peut pénétrer dans tous les sous-répertoires de niveau, ce qui est plus simple que l'itération, mais l'attention doit être accordée au risque de débordement de pile; 4. Lors de l'utilisation de la récursivité, il est nécessaire de s'assurer que le boîtier de base est accessible, évitez les appels infinis et lorsque la profondeur est grande, il doit être considéré comme une itération ou une substitution de pile explicite pour améliorer les performances et la stabilité. Ainsi, quand le problème contient "plus petit

Comprendre le pass-by-by-référence de PHP: performance et pièges Comprendre le pass-by-by-référence de PHP: performance et pièges Aug 03, 2025 pm 03:10 PM

Pass-by-ReferenceInphpDoOesNoTimproveProformancewithLareArraysorobjectsDuetocopy-on-writeAndobjecthandles, SOITSHOULDNOTBEUDEUSEFORTHATPUS

L'évolution des rappels: syntaxe appelable de première classe dans PHP 8.1 L'évolution des rappels: syntaxe appelable de première classe dans PHP 8.1 Aug 03, 2025 am 10:00 AM

Php8.1DidNoIntroduceFirst-ClasscallableSyntax; ThisFeaturescoweterInphp8.4.1.priortophp8.4, callbacksusedStrings, Arrays, Orclos ures, qui est venu à pré-album et a été amélioré la présence de théâtre, les fibres et les fibres et le bouton-aléatoire

Techniques de simulation de la surcharge des fonctions dans PHP Techniques de simulation de la surcharge des fonctions dans PHP Aug 03, 2025 pm 01:12 PM

PHP ne prend pas en charge la surcharge de la fonction comme Java ou C, mais peut être simulé grâce à une variété de techniques; 1. Utilisez des paramètres par défaut et des paramètres optionnels pour obtenir différentes méthodes d'appel en définissant des valeurs par défaut pour les paramètres; 2. Utilisez la liste des paramètres de longueur variable (tels que ... les opérateurs), effectuez une logique différente en fonction du nombre de paramètres; 3. Effectuez des vérifications de type dans la fonction et changez le comportement en fonction du type de paramètre; 4. Utilisez les paramètres nommés de PHP8 pour ignorer les paramètres facultatifs par dénomination explicite et améliorer la lisibilité; 5. En fonction de la distribution du mode des paramètres, route vers différentes fonctions de traitement en jugeant le nombre et le type de paramètres, qui conviennent aux scénarios complexes; Ces méthodes ont des compromis et doivent être sélectionnées en fonction des besoins réels pour garantir un code clair et maintenable.

Itération économe en mémoire avec les générateurs PHP et le mot-clé «rendement» Itération économe en mémoire avec les générateurs PHP et le mot-clé «rendement» Aug 03, 2025 am 01:38 AM

Utilisez le générateur PHP et rendez-vous les mots clés pour traiter efficacement de grands ensembles de données pour éviter le débordement de la mémoire; 1. Le générateur réalise l'évaluation paresseuse par valeur de rendement, ne laissant qu'une seule valeur en mémoire à la fois; 2. Il convient pour des scénarios tels que la lecture de fichiers grands ligne par ligne, comme l'utilisation de fgets combinés avec le rendement en ligne par ligne, et le traitement des journaux ou des fichiers CSV ligne par ligne; 3. Prise en charge de la sortie de la paire de valeurs de clé et spécifiez explicitement les noms de clés; 4. Il présente les avantages de l'empreinte de la mémoire basse, du code concis et de l'intégration transparente avec Foreach; 5. Cependant, il existe des restrictions telles que l'incapacité à rembobiner, à ne pas prendre en charge l'accès aléatoire et ne peuvent pas être réutilisées, et elle doit être recréée avant la réalisation de l'itération; Par conséquent, lorsqu'il est nécessaire de parcourir une grande quantité de données, l'utilisation de générateurs doit être prioritaire.

Création d'objets appelés en php avec la méthode magique `__invoke` Création d'objets appelés en php avec la méthode magique `__invoke` Aug 06, 2025 am 09:29 AM

Le__invokemagicmethodinphpallowsanobjectToballedasafonction, permettant à la réduction de la calcul.2.20e parvenue à la main-d'œuvre et aux arguments.

Tirer parti des variables statiques dans les fonctions de persistance de l'État Tirer parti des variables statiques dans les fonctions de persistance de l'État Aug 14, 2025 pm 10:46 PM

STATICVARIABLESSINSIDEFUNCTIONSETRATAGETHEURSIR VALUEBETWEENCHLLS, InitializedCecedPersistingForthEprogram’s Dessation HileLeringing a été scoped.2.EnTheyeusefulForTrackingFunctionCalCounts, cachingResults, and ImplementGenerraters, asseenincandphPpexles examples.

Embrasser la programmation fonctionnelle: fonctions d'ordre supérieur dans PHP Embrasser la programmation fonctionnelle: fonctions d'ordre supérieur dans PHP Aug 03, 2025 am 02:12 AM

Ordre de plus en plus élevée dans les États-Unis, il est possible que

See all articles