第十三节--对象串行化


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项目的方法
Oct 09 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
PHP URL路由类实例
Nov 12 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
Jan 26 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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一些错误处理的方法与技巧总结
2013/08/10 PHP
php中文验证码实现示例分享
2014/01/12 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
jQuery Selector选择器小结
2010/05/06 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
用Python设计一个经典小游戏
2017/05/15 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
python3让print输出不换行的方法
2020/08/24 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
2014酒店客房部工作总结
2014/12/16 职场文书
2016年教师新年寄语
2015/08/18 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
MySQL常用慢查询分析工具详解
2022/08/14 MySQL