首页 > 代码库 > 对象的序列化与反序列化-serialize与unserialize

对象的序列化与反序列化-serialize与unserialize

通俗的来说:

对象的序列化的基本概念: 所谓对象的序列化,就是可以把某个对象的属性名称,属性值, 属性类型,类名 以字符串的形式保存到文件中,在你需要的时候可以重新恢复.

对象的反序列化的基本概念, 是序列化的逆向过程.

 

函数:

序列化:serialize()

string serialize ( mixed $value )

手册上给的定义是:产生一个可存储的值的表示

其实就是在不丢失对象的结构和类型的情况下将一个对象转换成一个字符串,可以存储在任何地方

在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制,可以同时存储属性和方法。

 

反序列化:unserialize()

mixed unserialize ( string $str )

手册上给的定义是:从已存储的表示中创建 PHP 的值

就是将一个序列化字符串转换成其本身

如果在解序列化的时候需要实例化一个未定义类,则可以设置回调函数以供调用(以免得到的是不完整的 object "__PHP_Incomplete_Class")。

 

例如:

文件-f.php

 1 <?php
 2 
 3 /**
 4  * 定义一个学生类
 5  */
 6 class Student
 7 {
 8     public $name;
 9     public $age;
10     public $school;
11 
12     public function __construct($name, $age, $school)
13     {
14         $this->name = $name;
15         $this->age = $age;
16         $this->school = $school;
17    }
18 }
19 
20 /**
21  * 定义一个学校类
22  */
23 class School
24 {
25    public $name;
26    public $add;
27 
28    public function __construct($name, $add)
29    {
30         $this->name = $name;
31         $this->add = $add;
32    }
33 }
34 
35 $school = new School(‘北京大学‘, ‘海淀区‘); // 实例化一个学校类
36 $student = new Student(‘DBN‘, 23, $school); // 实例化一个学生类,并将学校类传递进去
37 
38 file_put_contents(‘f:/class.log‘, serialize($student)); // 序列化对象,写入文件

文件-g.php

1 <?php
2     header(‘content-type:text/html; charset=utf-8‘);
3     require ‘f.php‘; // 因为反序列化出来的类中包含了f.php中的SChool类,所以在反序列化文件中需要引入该文件
4 
5     $a = unserialize(file_get_contents(‘f:/class.log‘)); // 反序列化
6     var_dump($a);
7     echo $a->school->name; // 这时就可以正常调用类的成员属性

 

对象的序列化与反序列化-serialize与unserialize