数据载入中,请稍后......
 
展开
懒人码库客户端 点击或扫描下载
欢迎来到懒人码库!懒人码库QQ群:19651313
欢迎来到懒人码库!懒人码库QQ群:19651313  
当前位置:懒人码库 > 服务端脚本 > PHP

php函数serialize()与unserialize()

2013-12-27 09:01 来源:www.lanrenmaku.com / 作者:懒人 已被阅读:次 分类:PHP 上一篇:php最近的用户浏览记录 下一篇:Windows下wamp sever+sendmail使用mail()函数时的配置

php函数serialize()与unserialize()说明及案例。想要将已序列化的字符串变回 PHP 的值,可使用unserialize()。serialize()可处理除了resource之外的任何类型。甚至可以serialize()那些包含了指向其自身引用的数组。你正serialize()的数组/对象中的引用也将被存储。

 

serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

想要将已序列化的字符串变回 PHP 的值,可使用unserialize()。serialize()可处理除了resource之外的任何类型。甚至可以serialize()那些包含了指向其自身引用的数组。你正serialize()的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数__sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用unserialize()恢复对象时, 将调用__wakeup()成员函数。

注:在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制,可以同时存储属性和方法。请参见类与对象中的序列化对象部分获取更多信息。

serialize()和unserialize()在php手册上的解释是:

serialize — Generates a storable representation of a value

serialize — 产生一个可存储的值的表示

unserialize — Creates a PHP value from a stored representation

unserialize — 从已存储的表示中创建 PHP 的值

serialize,翻译过来叫“连载, 使连续”,通常称它为“序列化

这个函数很好用,特别是和unserialize一起配合使用

我觉得比较有用的地方就是将数据存入数据库或记录在文件中的时候

当然这种数据必须是比较复杂的(不复杂也不需要serialize了,我觉得起码得是一个一数组),而且是数据库中的非“索引或主键”,当然最好这个数据库字段在系统中和任何搜索程序无关,当然serialize后的数据其实还是能够搜索的,因为具体的数据并没有被加密或改变

 

  1. <?php 
  2. //简单一点的 
  3. $array = array(); 
  4. $array['key'] = 'website'
  5. $array['value']='www.isoji.org'
  6. $a = serialize($array); 
  7. echo $a
  8. unset($array); 
  9. $a = unserialize($a); 
  10. print_r($a); 
  11.  
  12.  
  13. //声明一个类 
  14. class dog { 
  15.  
  16. var $name
  17. var $age
  18. var $owner
  19.  
  20. function dog($in_name="unnamed",$in_age="0",$in_owner="unknown") { 
  21. $this->name = $in_name
  22. $this->age = $in_age
  23. $this->owner = $in_owner
  24.  
  25. function getage() { 
  26. return ($this->age * 365); 
  27.  
  28. function getowner() { 
  29. return ($this->owner); 
  30.  
  31. function getname() { 
  32. return ($this->name); 
  33. //实例化这个类 
  34. $ourfirstdog = new dog("Rover",12,"Lisa and Graham"); 
  35. //用serialize 函数将这个实例转化为一个序列化的字符串 
  36. $dogdisc = serialize($ourfirstdog); 
  37. print $dogdisc//$ourfirstdog 已经序列化为字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";} 
  38.  
  39. print '<BR>'
  40.  
  41. /* 
  42. ----------------------------------------------------------------------------------------- 
  43. 在这里你可以将字符串 $dogdisc 存储到任何地方如 session,cookie,数据库,php文件 
  44. ----------------------------------------------------------------------------------------- 
  45. */ 
  46.  
  47. //我们在此注销这个类 
  48. unset($ourfirstdog); 
  49.  
  50. /* 还原操作 */ 
  51.  
  52. /* 
  53. ----------------------------------------------------------------------------------------- 
  54. 在这里将字符串 $dogdisc 从你存储的地方读出来如 session,cookie,数据库,php文件 
  55. ----------------------------------------------------------------------------------------- 
  56. */ 
  57.  
  58.  
  59. //我们在这里用 unserialize() 还原已经序列化的对象 
  60. $pet = unserialize($dogdisc); //此时的 $pet 已经是前面的 $ourfirstdog 对象了 
  61. //获得年龄和名字属性 
  62. $old = $pet->getage(); 
  63. $name = $pet->getname(); 
  64. //这个类此时无需实例化可以继续使用,而且属性和值都是保持在序列化之前的状态 
  65. print "Our first dog is called $name and is $old days old<br>"
  66. print '<BR>'
  67. ?> 

 

小贴士:懒人码库 为网页前端人员提供建站常用的广告代码和网页特效,内容涵盖焦点图,导航菜单,jQuery代码,图片特效,对联广告,日历控件,在线客服等。