简简单单PHP对象序列化学习

原创
2016-06-13 11:04:45 678浏览

PHP还是比较常用的,于是我研究了一下PHP对象序列化,在这里拿出来和大家分享一下,希望对大家有用。PHP对象序列化也是一个比较普遍的功能,能够把一个对象进行串行化以后变成一个字符串,能够保存或者传输。我们先看一个例子:

  1. classTestClass
  2. {
  3. var$a;
  4. var$b;
  5. functionTestClass()
  6. {
  7. $this->a="Thisisa";
  8. $this->b="Thisisb";
  9. }
  10. functiongetA()
  11. {
  12. return$this->a;
  13. }
  14. functiongetB()
  15. {
  16. return$this->b;
  17. }
  18. }
  19. $obj=newTestClass;
  20. $str=serialize($obj);
  21. echo$str;

输出结果:

  1. O:9:"TestClass":2:{s:1:"a";s:9:"Thisisa";s:1:"b";s:9:"Thisisb";}

我们来分析一个对象串行化之后的字符串。

  1. O:9:"TestClass":2:
  2. {
  3. s:1:"a";s:9:"Thisisa";
  4. s:1:"b";s:9:"Thisisb";
  5. }

首先看对于对象本身的内容:O:9:"TestClass":2:O是说明这是一个对象类型(object),然后9是代表对象的名字查过浓度,2是代表该对象有几个属性。在看两个属性的内容:s:1:"a";s:9:"Thisisa";其实跟数组的内容比较类似,第一项:s:1:"a";是描述属性名称的,第二项s:9:"Thisisa";是描述属性值的。后面的属性类似。先说一种PHP对象序列化的应用,下面的内容是PHP手册上,没有更改原文。serialize()返回一个字符串,包含着可以储存于PHP的任何值的字节流表示。unserialize()可以用此字符串来重建原始的变量值。用序列化来保存对象可以保存对象中的所有变量。对象中的函数不会被保存,只有类的名称。

要能够unserialize()一个对象,需要定义该对象的类。也就是,如果序列化了page1.php中类A的对象$a,将得到一个指向类A的字符串并包含有所有$a中变量的值。如果要在page2.php中将其解序列化,重建类A的对象$a,则page2.php中必须要出现类A的定义。这可以例如这样实现,将类A的定义放在一个包含文件中,并在page1.php和page2.php都包含此文件。

  1. php
  2. //classa.inc:
  3. classA
  4. {
  5. var$one=1;
  6. functionshow_one()
  7. {
  8. echo$this->one;
  9. }
  10. }
  11. //page1.php:
  12. include("classa.inc");
  13. $a=newA;
  14. $s=serialize($a);
  15. //将$s存放在某处使page2.php能够找到
  16. $fp=fopen("store","w");
  17. fputs($fp,$s);
  18. fclose($fp);
  19. //page2.php:
  20. //为了正常解序列化需要这一行
  21. include("classa.inc");
  22. $s=implode("",@file("store"));
  23. $a=unserialize($s);
  24. //现在可以用$a对象的show_one()函数了
  25. $a->show_one();
  26. ?>

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。