第十三节 对象串行化 [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 Smarty初体验二 获取配置信息
Aug 08 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php 发送带附件邮件示例
Jan 23 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
Aug 20 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
php简单smarty入门程序实例
Jun 11 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 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
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
python使用Matplotlib画饼图
2018/09/25 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Django Rest framework权限的详细用法
2019/07/25 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
python实现三壶谜题的示例详解
2020/11/02 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
2014年稽查工作总结
2014/12/20 职场文书
学前班学生评语
2014/12/29 职场文书
会议通知
2015/04/15 职场文书
借条如何写
2015/05/26 职场文书
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android