第十三节 对象串行化 [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脚本中include文件出错解决方法
Nov 20 PHP
php google或baidu分页代码
Nov 26 PHP
php excel类 phpExcel使用方法介绍
Aug 21 PHP
关于PHP语言构造器介绍
Jul 08 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
PHP CURL中传递cookie的方法步骤
May 09 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 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
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
js word表格动态添加代码
2010/06/07 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
ES6的新特性概览
2016/03/10 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Python读写docx文件的方法
2018/05/08 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
python实现在线翻译
2020/06/18 Python
主持人演讲稿范文
2013/12/28 职场文书
关于元旦的广播稿
2014/02/16 职场文书
班级安全教育实施方案
2014/02/23 职场文书
家长写给老师的建议书
2014/03/13 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
干部作风建设心得体会
2014/10/22 职场文书
特岗教师个人总结
2015/02/10 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏