与类有关的其他魔术方法

序列化与反序列化技术

含义:

序列化:

就是将一个变量所代表的“内存”数据,转换为“字符串”形式并持久保存在硬盘上的一种做法。

反序列化:

就是将序列化之后保存在硬盘上的“字符串数据”,恢复为其原来的内存形式的变量数据的一种做法。

序列化的做法:

$v1 =  123; //这是一个变量,代表任意的内存数据

$s1 =  serialize( $v1 ); //将任何类型的变量数据,转换为“字符串”

file_put_contents( ‘要保存的目标文本文件’, $s1); //将该字符串,保存到一个文件里(就是硬盘数据)

反序列化的做法:

$s1 = file_get_contents( ‘保存序列化数据的目标文本文件’); //从一个文件里读出其中的所有字符

$v1 =  unserialize( $s1 ); //将该字符串数据,反序列化转换为变量(数据)

举例:

先进行基本数据的序列化:

再来对他们进行反序列化:

__sleep():用于对象的序列化:

1,对一个对象进行序列化,只能将其属性数据“保存起来”,而方法被忽略(方法不是数据)

2,对象的序列化的时候,会自动调用该对象所属类的这个魔术方法:__sleep()(前提是有该方法)。

且,此时,该方法必须返回一个数组,数组中是“计划”要进行序列化的属性名;

举例:

类文件内容如下:

__wakeup:用于对象的反序列化:

1,对一个对象进行反序列化,其实是恢复其原来保存起来的属性数据,而且,此时必然需要依赖该对象原本的所属类;

2,对象在反序列化的时候,会自动调用该对象所属类的这个魔术方法:__wakeup()

举例:

下面演示可选属性的序列化(通过__sleep):

然后,对其对象进行序列,并显示该对象的数据:

然后,在另一个页面中,对其进行反序列化:

__tostring()魔术方法——比较常用!

含义:

将一个对象“当做”一个字符串来使用的时候,会自动调用该方法,并且在该方法中,可以返回一定的字符串,以表明该对象转换为字符串之后的结果。

注意:

如果没有定义该方法,则对象无法当做字符串来使用!!!

__invoke()魔术方法:

将对象当作函数来使用的时候,会自动调用该方法。通常不推荐这么做。

class  A{

function  __invoke(){

echo “<br />我是一个对象呀,你别当我是一个函数来随便调用!”;

}

}

$obj1 = new A();

$obj1(); //此时就会调用类中的方法:__invoke()

最新文章

  1. Access使用参数化UPDATE数据时,数据无法更新的问题
  2. 制作DIP Package及DIP焊盘制作,不规则焊盘制作
  3. 不能返回函数内部new分配的内存的引用
  4. 架构师速成-如何高效编程 for java
  5. IE9 JSON未定义
  6. USACO Section 3.1: Score Inflation
  7. 【英语】Bingo口语笔记(27) - 如何培养口语语感
  8. AngularJS 之iOS 移动 APP 混合开发(原生+JS)
  9. MIPI CSI-2规范一——概述及层级
  10. java major version(转)
  11. jQuery控制input不可编辑
  12. PHP重要知识点
  13. 微信公众号开发系列-Http请求封装基类
  14. golang获取u盘序列号(通过读取注册表实现)
  15. p132程序代码解析
  16. iOS开发第三方库一 IQKeyboardManager
  17. 从PHP官方镜像创建开发镜像
  18. 不能安装vmtools解决:一个命令安装
  19. mysql 实时统计脚本 QPS,TPS和线程连接数等
  20. xmpp实现的即时通讯聊天(一)

热门文章

  1. SQL学习笔记:基础教程
  2. Spring事务控制
  3. flex 自定义tooltip
  4. 20155307 2016-2017-2 《Java程序设计》第4周学习总结
  5. 20155321 《Java程序设计》实验五 网络编程与安全
  6. 20155323 2016-2017-2 《Java程序设计》第一周学习总结
  7. 238. Product of Array Except Self(对O(n)和递归又有了新的理解)
  8. 【转载】ID3DXSPRITE接口简单使用
  9. MySQL入门篇(五)之高可用架构MHA
  10. 12、Java并发编程:阻塞队列