第十三节 对象串行化 [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递归实现无限分类 格式化数组的详解
Jun 08 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
php查找字符串出现次数的方法
Dec 01 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 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可逆加密函数(分享)
2013/06/06 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
如何使用python爬取csdn博客访问量
2016/02/14 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Sanic框架应用部署方法详解
2018/07/18 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
python几种常用功能实现代码实例
2019/12/25 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
opencv实现图像平移效果
2021/03/24 Python
2014年党务公开实施方案
2014/02/27 职场文书
本科毕业生自荐信
2014/06/02 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
满月酒邀请函
2015/01/30 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫