第十三节--对象串行化


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 相关文章推荐
Content-type 的说明
Oct 09 PHP
mysql建立外键
Nov 25 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php简单smarty入门程序实例
Jun 11 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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 无法载入mysql扩展
2010/03/12 PHP
php.ini中date.timezone设置分析
2011/07/29 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
浅谈js中的bind
2019/03/18 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
Python文件去除注释的方法
2015/05/25 Python
使用Python设计一个代码统计工具
2018/04/04 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
python中pygame安装过程(超级详细)
2019/08/04 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
数控技术专业推荐信
2013/11/01 职场文书
五一手机促销方案
2014/03/08 职场文书
党员承诺践诺书
2014/05/20 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python