Maison  >  Article  >  développement back-end  >  [classes et objets php] méthodes magiques

[classes et objets php] méthodes magiques

不言
不言original
2018-04-14 15:50:481610parcourir

Le contenu partagé avec vous dans cet article concerne les méthodes magiques [classes et objets php] Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer

Méthodes magiques (Méthodes magiques)

__construct()__destruct()__callStatic()__set()__isset()__unset()__wakeup()__invoke()__clone() __debugInfo()

__sleep() et __wakeup()

public array __sleep ( void )void __wakeup ( void )

__sleep() est utilisé pour soumettre des données non validées ou des opérations de nettoyage similaires. Par exemple, il existe des objets très volumineux, mais il n’est pas nécessaire de les enregistrer tous.

__wakeup() est utilisé pour les opérations de désérialisation. Par exemple, rétablissez la connexion à la base de données ou effectuez d'autres opérations d'initialisation.

serialize() vérifiera s'il existe une méthode magique __sleep() dans la classe. Si elle est présente, cette méthode sera appelée en premier, puis l'opération de sérialisation sera effectuée. Cette fonction peut être utilisée pour nettoyer un objet et renvoyer un tableau contenant les noms de toutes les variables de l'objet qui doivent être sérialisées. Si la méthode ne renvoie rien, NULL est sérialisé et une erreur de niveau E_NOTICE est générée.

unserialize() vérifie s'il existe une méthode __wakeup(). Si elle existe, la méthode __wakeup sera appelée en premier pour préparer à l'avance les ressources nécessaires à l'objet.


Explication des concepts ci-dessus

Serialize peut convertir des variables, y compris des objets, en données d'octets continus. Vous pouvez enregistrer les variables sérialisées dans un fichier ou les transmettre sur le réseau. désérialisez-le aux données d'origine.Pour une classe que vous définissez avant de désérialiser l'objet de la classe, PHP peut stocker avec succès les propriétés et les méthodes de son objet. Parfois, vous aurez peut-être besoin de désérialiser un objet avant de le désérialiser immédiatement après la sérialisation. Pour cela, PHP recherchera automatiquement les méthodes __sleep et __wakeup.

Lorsqu'un objet est sérialisé, PHP appellera la méthode __sleep (si elle existe). Après avoir désérialisé un objet, PHP appelle la méthode __wakeup. Aucune des deux méthodes n'accepte de paramètres. La méthode __sleep doit renvoyer un tableau contenant les propriétés qui doivent être sérialisées. PHP ignore les valeurs des autres propriétés. S'il n'y a pas de méthode_ _sleep, PHP enregistrera tous les attributs. Avant l'exécution du programme, la fonction serialize() vérifiera d'abord s'il existe une méthode magique __sleep Si elle existe, la méthode __sleep() sera d'abord appelée puis exécutée. Cette fonction peut être utilisée pour nettoyer un objet et renvoyer un tableau contenant les noms de toutes les variables de l'objet. Si la méthode ne renvoie rien, NULL est sérialisé, ce qui entraîne une erreur E_NOTICE. En revanche, unserialize() vérifie s'il existe une méthode __wakeup. Si elle existe, la méthode __wakeup sera appelée en premier pour préparer les données objet à l'avance.

La méthode __sleep est souvent utilisée pour soumettre des données non validées ou des opérations similaires. En même temps, cette fonction est très utile si vous disposez d’objets volumineux qui n’ont pas besoin d’être enregistrés. __wakeup est souvent utilisé dans les opérations de désérialisation, telles que le rétablissement d'une connexion à une base de données ou l'exécution d'autres opérations d'initialisation.


__toString()

est utilisé pour savoir comment une classe doit répondre lorsqu'elle est traitée comme une chaîne. Par exemple, echo $obj; devrait afficher quelque chose.

Cette méthode doit renvoyer une chaîne, sinon une erreur fatale de niveau E_RECOVERABLE_ERROR sera émise. Les exceptions ne peuvent pas être levées dans la méthode __toString(). Cela entraînerait une erreur fatale.


Il convient de souligner que
Example #2 简单示例<?php// Declare a simple classclass TestClass{
    public function __toString() {
        return &#39;类被当成字符串时tostring返回字符串&#39;;        // return intval(&#39;tostring返回值的内容不为字符串&#39;);//Recoverable fatal error: Method TestClass::__toString() must return a string value
    }
}$class = new TestClass();echo $class;//echo (string)$class; // 未定义 __toString()方法,并将对象转换为字符串,报错Recoverable fatal error: Object of class TestClass could not be converted to string?>
Avant PHP 5.2.0, la méthode __toString() ne pouvait prendre effet que lorsqu'elle était utilisée directement avec echo ou print.

Après PHP 5.2.0, il peut être utilisé dans n'importe quel environnement de chaîne (comme via printf(), en utilisant le modificateur %s), mais ne peut pas être utilisé dans des environnements sans chaîne (comme en utilisant le modificateur %d) .
À partir de PHP 5.2.0, la conversion d'un objet qui ne définit pas la méthode __toString() en chaîne générera une erreur de niveau E_RECOVERABLE_ERROR.


__invoke()

Lorsque vous essayez d'appeler un objet en appelant une fonction, la méthode __invoke() est automatiquement appelée. (PHP 5.3.0)
mixed __invoke ([ $... ] )

Example #3 使用 __invoke()<?phpclass CallableClass {
    function __invoke($x) {
        var_dump($x);    //int(5)
    }
}$obj = new CallableClass;$obj(5);
var_dump(is_callable($obj));   //bool(true)?>

__set_state()

Recommandations associées :


[php Classes et objets] Traverse

[classes et objets php] Classe anonyme

[classes et objets php] surchargée

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
Article précédent:PHP génère de la paroleArticle suivant:PHP génère de la parole