第十三节 对象串行化 [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创建动态图像
Oct 09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
php结合飞信 免费天气预报短信
May 07 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
精美漂亮的php分页类代码
Apr 02 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
浅谈PHP中pack、unpack的详细用法
Mar 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
如何在PHP程序中防止盗链
2008/04/09 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
Python交互式图形编程的实现
2019/07/25 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
python和JavaScript哪个容易上手
2020/06/23 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
企业精细化管理实施方案
2014/03/23 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
大学生安全责任书
2014/07/25 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
2014年业务工作总结
2014/11/17 职场文书
爱国教育主题班会
2015/08/14 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
pytorch 实现多个Dataloader同时训练
2021/05/29 Python