第十三节 对象串行化 [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中的Class的几点个人看法
Oct 09 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
解析PHP缓存函数的使用说明
May 10 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 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
晶体管来复再生式二管收音机
2021/03/02 无线电
精通php的十大要点(上)
2009/02/04 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
JavaScript DOM基础
2015/04/13 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
Python 登录网站详解及实例
2017/04/11 Python
python编程实现希尔排序
2017/04/13 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
python3中zip()函数使用详解
2018/06/29 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
Python 列表反转显示的四种方法
2020/11/16 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
电子商务应届生求职信
2013/11/16 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
怎么写好自荐书
2014/03/02 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
幼儿园见习报告
2014/10/30 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
避暑山庄导游词
2015/02/04 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
Pytest中skip skipif跳过用例详解
2021/06/30 Python