PHP可序列化接口

介绍

串行化接口存在于PHP库来构建提供custimised serialzing的类。PHP的serialize()函数能够将大多数值序列化为可存储的表示形式。但是,用户定义类的对象无法序列化。该接口使之成为可能。

语法

Serializable {
   /* Methods */
   abstract public serialize ( void ) : string
   abstract public unserialize ( string $serialized ) : void
}

方法

Serializable::serialize —对象的字符串表示形式

Serializable::unserialize —从序列化的字符串表示形式构造对象

内置的serialze()函数生成一个值的可存储表示

serialize ( mixed $value ) : string

unserialize()函数从存储的表示形式创建一个PHP值

unserialize ( string $str [, array $options ] ) : mixed

可序列化的示例

在以下示例中,字符串变量用于myclass的私有属性。当内置serialize()函数使用此类的对象作为参数时,serialize()将自动调用method。类似地,unserialize()函数使用字符串prvate属性重建对象。

示例

<?php
class myclass implements Serializable {
   private $arr;
   public function __construct() {
      $this->arr = "nhooo India (p) Ltd";
   }
   public function serialize() {
      echo "Serializing object..\n";
      return serialize($this->arr);
   }
   public function unserialize($data) {
      echo "Unserializing object..\n";
      $this->arr = unserialize($data);
   }
   public function getdata() {
      return $this->arr;
   }
}
$obj = new myclass;
$serobj = serialize($obj);
var_dump ($serobj);
$obj1 = unserialize($serobj);
var_dump($obj1->getdata());
?>

输出结果

上面的程序显示以下输出

Serializing object..
string(55) "C:7:"myclass":36:{s:28:"nhooo India (p) Ltd";}"
Unserializing object..
string(28) "nhooo India (p) Ltd"