第十三节--对象串行化


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 相关文章推荐
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP echo()函数讲解
Feb 15 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
再谈PHP中单双引号的区别详解
2016/06/12 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
常用的javascript function代码
2008/05/23 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
django中模板的html自动转意方法
2018/05/27 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
HSRP的含义以及如何工作
2014/09/10 面试题
电子专业推荐信范文
2013/11/18 职场文书
挂职思想汇报
2013/12/31 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
Python内置的数据类型及使用方法
2022/04/13 Python
Docker安装MySql8并远程访问的实现
2022/07/07 Servers