Maison >développement back-end >tutoriel php >Présentation de la nouvelle méthode magique __invoke en PHP 5.3
PHP a ajouté une nouvelle méthode magique appelée __invoke depuis la version 5.3. En utilisant cette méthode, vous pouvez appeler directement l'objet après avoir créé l'instance. Comme le montre l'exemple suivant :
class testClass { public function __invoke { print "hello world"; } } $n = new testClass; $n();
Le résultat de l'exécution est :
hello world。
L'exemple officiel de PHP est le suivant :
class CallableClass { public function __invoke($x) { var_dump($x); } } $obj = new CallableClass; $obj(5); var_dump(is_callable($obj));
Pièce jointe : Explication détaillée des autres méthodes magiques PHP :
Les classes en PHP peuvent utiliser des méthodes magiques. Il stipule que les méthodes commençant par deux traits de soulignement (__) sont réservées comme méthodes magiques, il est donc recommandé que les noms de fonctions ne commencent pas par __, sauf s'il s'agit de surcharger une méthode magique existante.
Les noms de fonctions __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state et __clone sont magiques dans les classes PHP. Vous ne pouvez pas avoir de fonctions avec ces noms dans aucune classe. de vos classes à moins que vous ne souhaitiez la fonctionnalité magique qui leur est associée.
Les deux méthodes suivantes sont conçues pour les propriétés qui ne sont pas déclarées dans la classe et leur classe parent.
__get($property) Cette méthode sera déclenchée lorsqu'une propriété non définie est appelée, et le paramètre passé est le nom de la propriété à laquelle on accède.
__set($property,$value) Lors de l'attribution d'une valeur à une propriété non définie, cette méthode sera déclenchée et les paramètres transmis sont le nom de la propriété et la valeur à définir.
La non-déclaration inclut ici les attributs dont le contrôle d'accès est protégé et privé (c'est-à-dire les attributs qui n'ont aucune autorisation d'accès) lorsqu'ils sont appelés à l'aide d'objets.
Comme les méthodes __get et __set, le non déclaré inclut ici les attributs dont le contrôle d'accès est protégé et privé (c'est-à-dire les attributs qui n'ont aucune autorisation d'accès) lorsqu'ils sont appelés à l'aide d'un objet.
Les méthodes non définies ici incluent des méthodes qui n'ont pas l'autorisation d'accéder ; si la méthode n'existe pas, accédez à la classe parent pour trouver la méthode. Si elle n'existe pas dans la classe parent, appelez le __call. () de cette classe, si la méthode __call() n'existe pas dans cette classe, accédez à la méthode __call() dans la classe parent.
Fonction __autoload, qui est automatiquement appelée lorsque vous essayez d'utiliser une classe qui n'a pas encore été définie. En appelant cette fonction, le moteur de script a une dernière chance de charger les classes requises avant que PHP échoue avec une erreur.
Remarque : les exceptions levées dans la fonction __autoload ne peuvent pas être interceptées par le bloc d'instruction catch et provoquer des erreurs fatales, elles doivent donc être interceptées dans la fonction elle-même.
Méthode constructeur __construct, cette méthode est appelée lors de la création d'un objet. L'avantage d'utiliser cette méthode par rapport à php4 est que la méthode constructeur peut avoir un nom unique, quel que soit le nom de la classe. dans. De cette façon Lorsque vous modifiez le nom de la classe, vous n'avez pas besoin de changer le nom du constructeur.
Méthode destructeur __destruct, PHP appellera cette méthode avant que l'objet ne soit détruit (c'est-à-dire avant qu'il ne soit effacé de la mémoire). Par défaut, PHP libère uniquement la mémoire occupée par les propriétés des objets et détruit les ressources liées aux objets. Le destructeur permet d'exécuter du code arbitraire pour effacer la mémoire après avoir utilisé un objet. Lorsque PHP décide que votre script n'est plus associé à l'objet, le destructeur sera appelé.
Dans l'espace de noms d'une fonction, cela se produira au retour de la fonction. Pour les variables globales, cela se produit à la fin du script. Si vous souhaitez détruire explicitement un objet, vous pouvez attribuer n'importe quelle autre valeur à la variable pointant vers l'objet. Généralement, attribuez la variable à null ou appelez unset.
L'affectation d'objet en php5 utilise l'affectation de référence. Si vous souhaitez copier un objet, vous devez utiliser la méthode clone Lorsque vous appelez cette méthode, l'objet appellera automatiquement la méthode magique __clone. certaines opérations lors de la copie de l'objet L'opération d'initialisation peut être implémentée dans la méthode __clone.
La méthode __tostring est automatiquement appelée lors de la conversion d'un objet en chaîne, par exemple lors de l'utilisation de echo pour imprimer l'objet.
Avant php5.2.0, la méthode __tostring ne pouvait prendre effet que lorsqu'elle était utilisée en combinaison avec echo() ou print(). Après php5.2.0, il peut prendre effet dans n'importe quel environnement de chaîne (par exemple, via printf(), en utilisant le modificateur %s), mais il ne peut pas être utilisé dans des environnements sans chaîne (comme en utilisant le modificateur %d). Depuis php5.2.0, si un objet qui ne définit pas la méthode __tostring est converti en chaîne, une erreur e_recoverable_error sera signalée.
__wakeup Lors de la désérialisation, appelez
serialize() pour vérifier s'il existe une fonction avec le nom magique __sleep dans la classe. Si tel est le cas, la fonction s'exécutera avant toute sérialisation. Il efface l'objet et doit renvoyer un tableau contenant les noms de toutes les variables de l'objet qui doivent être sérialisées.
Le but de l'utilisation de __sleep est de fermer toutes les connexions à la base de données que l'objet peut avoir, de soumettre des données en attente ou d'effectuer des tâches de nettoyage similaires. De plus, cette fonction est utile si vous disposez d'objets très volumineux qui n'ont pas besoin d'être stockés complètement.
PHP À l'inverse, unserialize() vérifie l'existence d'une fonction portant le nom magique __wakeup. Cette fonction peut reconstruire toutes les ressources que l'objet peut avoir, s'il est présent. Le but de l'utilisation de __wakeup est de rétablir toutes les connexions à la base de données qui auraient pu être perdues lors de la sérialisation et de gérer d'autres tâches de réinitialisation.
Lorsque vous essayez d'appeler un objet en appelant une fonction, la méthode __invoke est automatiquement appelée.
Cela fonctionne de manière similaire à la méthode magique __call(), __callstatic() sert à gérer les appels de méthode statiques.
PHP resserre la définition de la méthode __callstatic() ; elle doit être publique et doit être déclarée statique. De même, la méthode magique __call() doit être définie comme publique, comme toutes les autres méthodes magiques.
Pour plus d'articles sur la nouvelle méthode magique __invoke en PHP 5.3, veuillez faire attention au site Web PHP chinois !