第十三节 对象串行化 [13]


Posted in PHP onOctober 09, 2006

串行化可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.

当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值. 如果没有__sleep方法,PHP将保存所有属性.

例子6.16显示了如何用__sleep和__wakeup方法来串行化一个对象. Id属性是一个不打算保留在对象中的临时属性. __sleep方法保证在串行化的对象中不包含id属性. 当反串行化一个User对象,__wakeup方法建立id属性的新值. 这个例子被设计成自我保持. 在实际开发中,你可能发现包含资源(如图像或数据流)的对象需要这些方法.

Listing 6.16 Object serialization
<?php

class User
{
public $name;
public $id;

function __construct()
{
//give user a unique ID 赋予一个不同的ID
$this->id = uniqid();
}

function __sleep()
{
//do not serialize this->id 不串行化id
return(array("name"));
}

function __wakeup()
{
//give user a unique ID
$this->id = uniqid();
}
}

//create object 建立一个对象
$u = new User;
$u->name = "Leon";

//serialize it 串行化 注意不串行化id属性,id的值被抛弃
$s = serialize($u);

//unserialize it 反串行化 id被重新赋值
$u2 = unserialize($s);

//$u and $u2 have different IDs $u和$u2有不同的ID
print_r($u);
print_r($u2);
?>

PHP 相关文章推荐
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
php fckeditor 调用的函数
Jun 21 PHP
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
第七节 类的静态成员 [7]
Oct 09 #PHP
用PHP实现文件上传二法
Oct 09 #PHP
PHP安装全攻略:APACHE
Oct 09 #PHP
用PHP生成自己的LOG文件
Oct 09 #PHP
VFP与其他应用程序的集成
Oct 09 #PHP
PHP中在数据库中保存Checkbox数据(1)
Oct 09 #PHP
分页显示Oracle数据库记录的类之二
Oct 09 #PHP
You might like
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
php反射应用示例
2014/02/25 PHP
jQuery Selector选择器小结
2010/05/06 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
Python 正则表达式操作指南
2009/05/04 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
基于Python解密仿射密码
2019/10/21 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
肯尼迪就职演说稿
2013/12/31 职场文书
公务员综合考察材料
2014/02/01 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
英语分层教学实施方案
2014/06/15 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2014年体育部工作总结
2014/11/13 职场文书
先进班组事迹材料
2014/12/25 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
大学生暑假实习总结
2015/07/13 职场文书
队名及霸气口号大全
2015/12/25 职场文书