第十三节 对象串行化 [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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
php的access操作类
Apr 09 PHP
php中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
基于php缓存的详解
May 15 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
PHP类的反射用法实例
Nov 03 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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 curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
回顾Javascript React基础
2019/06/15 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Python入门篇之字典
2014/10/17 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
python实现贪吃蛇小游戏
2020/03/21 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
python3.6编写的单元测试示例
2019/08/17 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
校本教研工作制度
2014/01/22 职场文书
美容院营销方案
2014/03/05 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
领导干部失职检讨书
2015/05/05 职场文书
新人入职感言
2015/07/31 职场文书
护理培训心得体会
2016/01/22 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
Python OpenCV之常用滤波器使用详解
2022/04/07 Python