Maison  >  Article  >  développement back-end  >  Quelles sont les méthodes magiques de la classe php

Quelles sont les méthodes magiques de la classe php

藏色散人
藏色散人original
2020-11-26 09:16:488805parcourir

Les méthodes magiques de la classe PHP sont : 1. La méthode "__sleep", qui renvoie un tableau contenant les noms de toutes les variables de l'objet qui doivent être sérialisées ; à l'opposé de "__sleep"; 3. , la méthode "__tostring", renvoie le contenu à afficher lorsqu'une classe est traitée comme une chaîne, etc.

Quelles sont les méthodes magiques de la classe php

L'environnement d'exploitation de ce tutoriel : Système Windows 7, PHP version 5.6. Cette méthode convient à toutes les marques d'ordinateurs.

Recommandé : "Tutoriel vidéo PHP"

Méthode magique de la classe PHP

PHP commencera tous par un double trait de soulignement ( __ ) sont réservées en tant que méthodes magiques, donc à l'exception des méthodes magiques suivantes lors de la définition des méthodes de classe, il est recommandé de ne pas commencer par __.

__sleep : renvoie un tableau contenant les noms de toutes les variables de l'objet qui doivent être sérialisées. Lorsque la fonction Serialize sérialise une classe, elle vérifie d'abord si la méthode __sleep existe dans la classe. Si elle est présente, cette méthode est appelée avant la sérialisation. Et seules les propriétés du tableau renvoyées par __sleep sont sérialisées. Si __sleep ne renvoie rien, null sera sérialisé et une erreur de niveau E_NOTICE sera générée. __sleep ne peut pas renvoyer les membres privés de la classe parent, sinon une erreur de niveau E_NOTICE se produira. Cette méthode est utile pour les objets volumineux mais qui n’ont pas besoin de contenir toutes les données.

__wakeup : Contrairement à __sleep, lorsque la fonction de désérialisation est en cours de désérialisation, elle vérifiera d'abord si la méthode __wakeup existe dans la classe. Si elle existe, la méthode sera appelée en premier puis l'opération de désérialisation sera effectuée. . Utilisé pour préparer les ressources requises par certains objets avant la désérialisation ou d'autres opérations d'initialisation.

__tostring : renvoie le contenu à afficher lorsqu'une classe est traitée comme une chaîne. Cette méthode doit renvoyer une chaîne et ne peut pas lever d'exception dans cette méthode, sinon une erreur fatale se produira. Avant PHP5.2, cette méthode ne prenait effet que lorsque echo et print étaient utilisés directement. Après cela, elle pouvait prendre effet dans n'importe quel environnement de chaîne. Si un objet qui ne définit pas la méthode __toString est converti en chaîne, une erreur fatale se produirait. se produire.

__invoke : À partir de PHP 5.3, cette méthode sera appelée lors de la tentative d'appel d'un objet en tant que fonction.

__set_state : À partir de PHP5.1, cette méthode statique sera appelée lorsque la fonction var_export est appelée pour exporter une classe. Cette méthode n'a qu'un seul paramètre, qui est un tableau contenant des attributs comme clés et des valeurs d'attribut comme valeurs. Cette méthode peut être utilisée pour contrôler quels membres peuvent être exportés.

__debugInfo : À partir de PHP 5.6, cette méthode sera appelée lorsque la fonction var_dump est appelée pour imprimer les attributs de l'objet. Cette méthode peut être utilisée pour contrôler quels attributs peuvent être imprimés si cette méthode ne l'est pas. défini, tous les attributs de l'objet seront imprimés. Les attributs publics, protégés et privés seront tous imprimés. Renvoie un tableau contenant des propriétés pouvant être imprimées.

__construct : constructeur.

__destruct : destructeur.

__set, __get, __isset, __unset : attributs surchargés.

__call, __callstatic : méthodes surchargées.

__clone : ​​Copie d'objet.

<?php
class A{
    private $var;
    public $var2="b";
    
    function __construct(){
        $this->var=mt_rand();
    }
    
    function __sleep(){
        return array("var","var2");
    }
    
    function __wakeup(){
        $this->var=mt_rand();
    }
    
    function __toString(){
        return "class[".__CLASS__."]:{var:$this->var,var2:$this->var2}\n";
    }
    
    function __invoke($arg){
        $this->var2=$arg;
    }
    
    static function __set_state($arr){
        $a=new A();
        $a->var=$arr[&#39;var&#39;];
        return $a;
    }
}
$a=new A();
$str=serialize($a);
echo "$str\n";
$b=unserialize($str);
var_dump($b);
$b("inv-b");
echo $b;
eval(&#39;$c=&#39; . var_export($b,true) . &#39;;&#39;);
var_dump($c);
?>

Pour plus de connaissances liées à la programmation, veuillez visiter : Apprendre la programmation ! !

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