第十三节--对象串行化


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/
第十三节--对象串行化
串行化可以把变量包括对象,转化成连续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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
PHP 和 MySQL 基础教程(二)
Oct 09 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
php笔记之常用文件操作
Oct 12 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 PHP
第十二节--类的自动加载
Nov 16 #PHP
第十一节--重载
Nov 16 #PHP
第十节--抽象方法和抽象类
Nov 16 #PHP
第九节--绑定
Nov 16 #PHP
第八节--访问方式
Nov 16 #PHP
第七节--类的静态成员
Nov 16 #PHP
第六节--访问属性和方法
Nov 16 #PHP
You might like
ajax php 实现写入数据库
2009/09/02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
php解析json数据实例
2014/08/19 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
python爬虫要用到的库总结
2020/07/28 Python
Python如何绘制日历图和热力图
2020/08/07 Python
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
初中政治教学反思
2016/02/23 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
青岛市的收音机研制与生产
2022/04/07 无线电