PHP中的串行化变量和序列化对象(2)

时间:2010-01-13 08:36:19   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读: />  class TestClass   {    var $a;    var $b;       function TestClass()    {     $this->a = "This is a";     $this->b = "This is b";    }     &nbs...
  正文:

二、对象序列化
  
    对象的序列化也是一个比较普遍的功能,能够把一个对象进行串行化以后变成一个字符串,能够保存或者传输。
  
    我们先看一个例子:
  
  class TestClass
  {
   var $a;
   var $b;
  
   function TestClass()
   {
    $this->a = "This is a";
    $this->b = "This is b";
   }
  
   function getA()
   {
    return $this->a;
   }
  
   function getB()
   {
    return $this->b;
   }
  }
  
  $obj = new TestClass;
  $str = serialize($obj);
  echo $str;
  
    输出结果:
  
  O:9:"TestClass":2:{s:1:"a";s:9:"This is a";s:1:"b";s:9:"This is b";}
  
    我们来分析一个对象串行化之后的字符串。
  
  O:9:"TestClass":2:
  {
   s:1:"a";s:9:"This is a";
   s:1:"b";s:9:"This is b";
  }
  
    首先看对于对象本身的内容:O:9:"TestClass":2:O是说明这是一个对象类型(object),然后9是代表对象的名字查过浓度,2是代表该对象有几个属性。在看两个属性的内容:
  
    s:1:"a";s:9:"This is a"; 其实跟数组的内容比较类似,第一项:s:1:"a"; 是描述属性名称的,第二项s:9:"This is a"; 是描述属性值的。后面的属性类似。
  
    先说一种对象序列化的应用,下面的内容是PHP手册上,没有更改原文。
  
    serialize() 返回一个字符串,包含着可以储存于 PHP 的任何值的字节流表示。unserialize() 可以用此字符串来重建原始的变量值。用序列化来保存对象可以保存对象中的所有变量。对象中的函数不会被保存,只有类的名称。
  
    要能够 unserialize() 一个对象,需要定义该对象的类。也就是,如果序列化了 page1.php 中类 A 的对象 $a,将得到一个指向类 A 的字符串并包含有所有 $a 中变量的值。如果要在 page2.php 中将其解序列化,重建类 A 的对象 $a,则 page2.php 中必须要出现类 A 的定义。这可以例如这样实现,将类 A 的定义放在一个包含文件中,并在 page1.php 和 page2.php 都包含此文件。
  
  <?php
  // classa.inc:
  class A
  {
   var $one = 1;
  
   function show_one()
   {
    echo $this->one;
   }
  }
  
  // page1.php:
  include("classa.inc");
  
  $a = new A;
  $s = serialize($a);
  // 将 $s 存放在某处使 page2.php 能够找到
  $fp = fopen("store", "w");
  fputs($fp, $s);
  fclose($fp);
  
  // page2.php:
  // 为了正常解序列化需要这一行
  include("classa.inc");
  
  $s = implode("", @file("store"));
  $a = unserialize($s);
  
  // 现在可以用 $a 对象的 show_one() 函数了
  $a->show_one();
  ?>
  
    如果在用会话并使用了 session_reGISter() 来注册对象,这些对象会在每个 PHP 页面结束时被自动序列化,并在接下来的每个页面中自动解序列化。基础上是说这些对象一旦成为会话的一部分,就能在任何页面中出现。
来源:http://www.002pc.com/master/College/Programming/PHP/11813.html

收藏到:

关于《PHP中的串行化变量和序列化对象(2)》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td