


Création d'objets appelés en php avec la méthode magique `__invoke`
La méthode magique __invoke en PHP permet à un objet d'être appelé en fonction, ce qui lui permet d'agir comme un appelable. 2. Il est défini dans une classe et déclenché automatiquement lorsque l'objet est invoqué par des parenthèses et des arguments. 3. Les cas d'utilisation courants incluent des callmables et des modèles de stratégie et des composants de middleware et de middleware où les objets doivent se comporter comme des fonctions tout en conservant l'état ou la configuration interne. 4. Une seule méthode __invoke est autorisée par classe, mais elle peut accepter les paramètres, renvoyer n'importe quel type et inclure des conseils de type. 5. Les objets sans __invoke lanceront une erreur fatale si elle est appelée comme une fonction, donc is_callable () doit être utilisée pour vérifier l'état callable avant l'invocation. 6. La méthode __invoke améliore l'expressivité du code en combinant la flexibilité de la programmation fonctionnelle avec une conception orientée objet, mais doit être utilisée judicieusement pour éviter une complexité inutile.
Dans PHP, les objets ne sont généralement pas directement appelés - vous ne pouvez pas simplement utiliser un objet comme une fonction. Cependant, PHP fournit une méthode magique appelée __invoke
qui vous permet de rendre un objet appelable, en le transformant en une entité "Funct" ou "Fermure comme". Cette fonctionnalité est puissante lorsque vous voulez que les objets se comportent comme des fonctions tout en conservant une conception à l'état et à l'objet.

Quelle est la méthode magique __invoke
?
La méthode __invoke
est automatiquement déclenchée lorsqu'un script essaie d'appeler un objet comme s'il s'agissait d'une fonction. Cela fait partie de l'ensemble de «méthodes magiques» de PHP (comme __construct
, __get
, __set
, etc.) qui fournissent des fonctionnalités spéciales lorsque certaines opérations sont effectuées sur un objet.
Vous définissez __invoke
à l'intérieur d'une classe comme toute autre méthode. Une fois défini, toute instance de cette classe peut être appelée en utilisant des parenthèses et des arguments, tout comme une fonction régulière.

classe Greeter { $ privé $ Greeting; fonction publique __construct ($ salutation) { $ this-> salutation = $ salutation; } fonction publique __invoke ($ name) { return "{$ this-> salutation}, $ name!"; } } $ Hello = new Greeter ("Hello"); Echo $ Hello ("Alice"); // Sortie: Bonjour, Alice!
Ici, $hello
est un objet, mais nous l'appelons comme une fonction: $hello("Alice")
. La méthode __invoke
gère cet appel.
Cas d'utilisation courants pour __invoke
1. Callables avec état
Parfois, vous avez besoin d'un comportement de type fonction qui se souvient ou utilise l'état interne. Au lieu d'utiliser des variables globales ou des fermetures avec use
, vous pouvez encapsuler la logique et les données dans une classe.

classe Counter { Count $ privé = 0; fonction publique __invoke () { retourner $ this-> compter; } } $ compteur = nouveau compteur (); echo $ compter (); // 1 echo $ compter (); // 2 echo $ compter (); // 3
Ceci est plus propre que la gestion de l'état en dehors d'une fonction et plus réutilisable que les fonctions anonymes avec des variables liées.
2. Modèle de stratégie avec des objets appelables
Vous pouvez utiliser __invoke
pour mettre en œuvre des stratégies ou des gestionnaires qui sont à la fois autonomes et interchangeables.
classe MultiplyOperation { fonction publique __invoke ($ a, $ b) { retourner $ a * $ b; } } Classe AddOperation { fonction publique __invoke ($ a, $ b) { retourner $ a $ b; } } $ operation = new multiplyoperation (); Echo $ opération (5, 3); // 15 $ operation = new AddOperation (); Echo $ opération (5, 3); // 8
Ces objets peuvent être transmis partout où un appelable est attendu, comme dans array_map
, usort
, etc.
3. Middleware ou Pipeline Stages
Les cadres utilisent souvent __invoke
pour les composants du middleware car ils sont faciles à configurer et à brancher dans des pipelines.
classe UpperCasemiddleware { fonction publique __invoke ($ data) { return strtoupper ($ data); } } class trimmiddleware { fonction publique __invoke ($ data) { Rendre la garniture ($ data); } } $ processeur = new UpperCasemiddleware (); $ input = "Hello World"; Processeur Echo $ ($ ENPO); // " BONJOUR LE MONDE "
Chaque middleware peut être une classe simple et à usage unique qui est facile à tester et à réutiliser.
Notes et limitations importantes
- Une seule méthode
__invoke
est autorisée par classe. - La méthode peut accepter n'importe quel nombre de paramètres et renvoyer n'importe quel type.
- Vous pouvez taper des arguments et des types de retour comme n'importe quelle autre méthode:
Fonction publique __invoke (String $ valeur): int { return strlen (Trim ($ value)); }
- Les objets sans
__invoke
lanceront uneFatal error
si elle est appelée comme une fonction.
Vérifier si un objet est appelant
Avant d'invoquer un objet, vous pouvez vérifier s'il est appelable à l'aide de la fonction is_callable()
:
$ obj = new myClass (); if (is_callable ($ obj)) { echo $ obj ("test"); } autre { Echo "L'objet n'est pas appelant."; }
Ceci est particulièrement utile lors de l'acceptation des callables comme paramètres dans les fonctions.
Résumé
La méthode magique __invoke
donne aux développeurs PHP un moyen propre de créer des objets qui agissent comme des fonctions. Il mélange la flexibilité de la programmation fonctionnelle avec la structure de la POO. Que vous construisiez des processeurs, des middleware ou des modèles de stratégie, __invoke
rend votre code plus expressif et réutilisable.
Ce n'est pas quelque chose que vous utiliserez tous les jours, mais lorsque le besoin s'en fait sentir, il offre une solution élégante. N'oubliez pas: avec une grande puissance, une grande responsabilité - ne la dépassez pas là où une fonction ou une méthode simple suffirait.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

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

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds



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

Pass-by-ReferenceInphpDoOesNoTimproveProformancewithLareArraysorobjectsDuetocopy-on-writeAndobjecthandles, SOITSHOULDNOTBEUDEUSEFORTHATPUS

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

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.

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.

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

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

Phpclosures avec USUSEKEYWORenableLexicalScopingBycaptureVariblesfromTheParentsCope.1.ClosuresaReanyMousfonctionnSeStCanAccesExternalVariblesViause.2.Bydefault, VariablesInUSEASEASEDBYVALUe; TOMODIFYTHETHEMPE
