第十三节--对象串行化


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 COOKIE设置为浏览器进程
Jun 21 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 PHP
PHP连接操作access数据库实例
Mar 30 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
详细解读php的命名空间(二)
Feb 21 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
laravel开发环境homestead搭建过程详解
Jul 03 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
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
python中模块查找的原理与方法详解
2017/08/11 Python
代码分析Python地图坐标转换
2018/02/08 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
简历中的自我评价怎么写
2014/01/29 职场文书
奠基仪式主持词
2014/03/20 职场文书
党支部评议意见
2015/06/02 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android