简简单单PHP对象序列化学习
创始人
2024-06-12 00:30:20
0

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

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

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

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...