首页 > 代码库 > 对象的序列化与反序列化-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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。