第十三节 对象串行化 [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 相关文章推荐
php扩展ZF――Validate扩展
Jan 10 PHP
用PHP连接MySQL代码的参数说明
Jun 07 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
php 如何获取数组第一个值
Aug 06 PHP
CodeIgniter中实现泛域名解析
Jul 19 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
用PHP创建PDF中文文档
2006/10/09 PHP
PHP编码规范-php coding standard
2007/03/16 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
世界红十字日活动总结
2015/02/10 职场文书
管辖权异议上诉状
2015/05/23 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript