对象的序列化与反序列化-serialize与unserialize
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象的序列化与反序列化-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的主要内容,如果未能解决你的问题,请参考以下文章
C#序列化与反序列化(Serialize,Deserialize)实例详解
297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)