兆鹏和您学PHP5——PHP5中的数据串行化

    今天我和大家分享我学习PHP5学习中的心得——数据(对象)的串行化,欢迎大家批评指正。

    (Why)为什么要数据串行化:也许我们在页面中,建立了一个数据结构对象,需要将该对象保存在文件系统或者通过网络传递给其他终端,那么我们需要将传递或者写入磁盘的数据进行串行化。而在重新读取被串行化数据或在其他终端接收被串行的数据时,我们需要反串行化。


    (How)如何串行化:在PHP5中有两个函数,一个是serialize(object),另一个是unserialize(object),前者是将一个对象串行化,后者是将对象反串行化。特别注意的是,在对象中,可以有两个函数,其一是_sleep函数,这个函数应该返回一个数组,该数组内的元素是需要串行化的数据名,因此你可以选择该对象中哪些数据结构是需要串行化的,而某些又是可以舍弃的。同理,还有一个_wakeup函数,该函数应该给出创建序列化中丢弃数据重新创建的方法,即如果序列化时丢弃了数据ID,那么则应该在_wakeup中给出反序列化时创建id。


   (Example)

<?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); 
?>

谢谢支持《兆鹏与您学PHP5》
阅读更多
个人分类: .NET
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭