第十三节 对象串行化 [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创建多级目录代码
Jun 05 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 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
php之CodeIgniter学习笔记
2013/06/17 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
python3代码中实现加法重载的实例
2020/12/03 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
《小石潭记》教学反思
2014/02/13 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
班级学习计划书
2014/04/27 职场文书
林肯就职演讲稿
2014/05/19 职场文书
上海世博会口号
2014/06/19 职场文书
新党章心得体会
2014/09/04 职场文书
2014年检验科工作总结
2014/11/22 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
八年级数学教学反思
2016/02/17 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书