PHP对象序列化与反序列化

PHP中所有的值都可以使用serialize函数序列化为一个包含字节流的字符串。unserialize函数则能够把字符串重新变回php原来的值。序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。为了能够反序列化一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。 如果要想在另外一个文件中反序列化一个对象,这个对象的类必须在反序列化之前定义,可以通过包含一个定义该类的文件或使用函数spl_autoload_register()来实现。强烈建议在整个应用程序都包含对象的类的定义。不然有可能出现在反序列化对象的时候,没有找到该对象的类的定义,从而把没有方法的类__PHP_Incomplete_Class_Name作为该对象的类,导致返回一个没有用的对象。

如果对象的类中定义了__sleep或__wakeup方法,则会在序列化时调用__sleep,反序列化时调用__wakeup。

var=mt_rand();
    }
    
    function __sleep(){
        return array("var","var2");
    }
    
    function __wakeup(){
        $this->var=mt_rand();
    }
    
    function __toString(){
        return "class[".__CLASS__."]:{var:$this->var,var2:$this->var2}\n";
    }
}
$a=new A();
echo $a;
$str=serialize($a);
echo "$str\n";
$b=unserialize($str);
echo $b;
?>

 

你可能感兴趣的:(PHP)