首页  >  文章  >  后端开发  >  讲解PHP面向对象序列化、反序列化的相关代码

讲解PHP面向对象序列化、反序列化的相关代码

jacklove
jacklove原创
2018-06-08 14:09:351385浏览

PHP面向对象序列化、反序列化的内容在php中很重要,本篇文章讲讲解其相关的代码内容。

序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。

警告:各种语言所采用的序列化机制往往不一样,不兼容。

1 序列化serialize()

string serialize ( mixed $value )

serialize() 返回字符串,此字符串包含了表示 value 的字节流,同时不丢失其类型和结构。

serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。

2 反序列化unserialize()

mixed unserialize ( string $str )

想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。

当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

如果要想在另外一个文件中反序列化一个对象,必须要在反序列化之前定义这个对象的类。   

// 未定义对象的类时,如果反序列化,会得到下面的__PHP_Incomplete_Class对象,不含方法。

__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

    本篇文章详解了HP面向对象序列化、反序列化的相关代码的内容,更多相关知识请关注php中文网。

相关推荐:

如何通过PHP方法判断是否是手机登录(代码)

如何通过php循环和递归实现无限级分类

在PHP中使用魔术方法__CLASS__来获取类名的相关操作

以上是讲解PHP面向对象序列化、反序列化的相关代码的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn