第十三节--对象串行化


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操作Access类(PHP+ODBC+Access)
Jan 02 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
PHP Pear 安装及使用
Mar 19 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
PHP Directory 函数的详解
Mar 07 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 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
简化php模板页面中分页代码的解析
2009/02/06 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
DOM相关内容速查手册
2007/02/07 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
家长学校实施方案
2014/03/15 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
暂住证明怎么写
2015/06/19 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
Java移除无效括号的方法实现
2021/08/07 Java/Android
Android存储中最基本的文件存储方式
2022/04/30 Java/Android