Maison  >  Article  >  développement back-end  >  Expliquer le code pertinent de la sérialisation et de la désérialisation orientées objet PHP

Expliquer le code pertinent de la sérialisation et de la désérialisation orientées objet PHP

jacklove
jackloveoriginal
2018-06-08 14:09:351396parcourir

Le contenu de sérialisation et de désérialisation orienté objet PHP est très important en PHP. Cet article explique le contenu du code associé.

Sérialisation : processus de conversion des informations d'état d'un objet en une forme pouvant être stockée ou transmise.

Attention : Les mécanismes de sérialisation utilisés par les différents langages sont souvent différents et incompatibles.

1 Serialize serialize()

string serialize ( mixed $value )

serialize() renvoie une chaîne qui contient un flux d'octets représentant la valeur sans perdre son type et sa structure.

serialize() peut gérer n'importe quel type sauf la ressource. Vous pouvez même sérialiser() des tableaux contenant des références à eux-mêmes.

Lors de la sérialisation d'un objet, PHP tentera d'appeler la fonction membre de l'objet __sleep() avant l'action de séquence. Cela permet d'effectuer toutes les opérations de nettoyage avant que l'objet ne soit sérialisé.

2 Deserialize unserialize()

mixed unserialize ( string $str )

Si vous souhaitez redéfinir la chaîne sérialisée en valeur PHP, vous pouvez utiliser unserialize () .

Lorsqu'un objet est restauré à l'aide d'unserialize(), la fonction membre __wakeup() sera appelée.

Si vous souhaitez désérialiser un objet dans un autre fichier, vous devez définir la classe de l'objet avant de désérialiser.

// Lorsque la classe de l'objet n'est pas définie, s'il est désérialisé, l'objet __PHP_Incomplete_Class suivant sera obtenu, sans méthodes.

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => Person
    [name:Person:private] => jack
    [age:Person:private] => 18
    [sex:Person:private] => M
)
<!--?php 
class Person {
    private $name;
    private $age;
    private $sex;
    function __construct($name, $age, $sex) {
        $this--->name = $name;
        $this->age = $age;
        $this->sex = $sex;
    } 
    function __sleep() {
        $arr = array(&#39;name&#39;, &#39;age&#39;);
        return $arr;
    }
    function __wakeup() {
        $this->sex = &#39;F&#39;;
        $this->age = 20;
    }
    function say() {
        echo &#39;My name is: &#39; . $this->name . &#39;,My age is: &#39; . $this->age . &#39;,My sex is: &#39; . $this->sex . PHP_EOL;
    }
}
$p = new Person(&#39;jack&#39;, 18, &#39;M&#39;);
$p->say(); // My name is: jack,My age is: 18,My sex is: M
$s = serialize($p); //得到(O:6:"Person":3:{s:12:"Personname";s:4:"jack";s:11:"Personage";i:18;s:11:"Personsex";s:1:"M";})字符串,有特殊字符
echo $s . PHP_EOL;
$o = unserialize($s); // 反序列化之前必须要定义这个对象的类
$o->say(); // My name is: jack,My age is: 20,My sex is: F

Cet article explique en détail le contenu des codes liés à la sérialisation et à la désérialisation orientés objet HP Pour plus de connaissances connexes, veuillez prêter attention au site Web chinois PHP.

Recommandations associées :

Comment déterminer s'il s'agit d'une connexion mobile via la méthode PHP (code)

Comment obtenir une classification de niveau infini grâce aux boucles et à la récursion PHP

Utilisez la méthode magique __CLASS__ en PHP pour obtenir les opérations associées au nom de la classe

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