2011-02-28 114 views
2

所以根据定义,在序列化时,类中的私人数字前缀为类名称。这对我来说是一个问题,我希望能够序列化/保存/反序列化一个确切的对象,但是PHP所做的就是给我一个私人数字的类名+变量名的其他变体。php反序列化与私人成员

有什么办法可以轻松地反序列化私人成员?

感谢,

+1

这应该自动发生反序列化。你能提供一个错误发生的例子吗? – Hamish 2011-02-28 03:12:28

回答

2

您不必担心系列化的,除非你的类inmplements的Serializable接口的内部或具有__wakeup and __sleep方法。

例如:

class Foo { 
    private $Secret = "Private (init)"; 

    public $FooSecret = "Public (init)"; 

    function setSecret($secret) { 
     $this->Secret = $secret; 
    } 
    function getSecret() { 
     return $this->Secret; 
    } 
} 

$bar = new Foo(); 
$bar->setSecret("Private (after serialize/unserialize)"); 
$bar->FooSecret = "Public (after serialize/unserialize)"; 
var_dump(unserialize(serialize($bar))); 

即使你有“FooSecret”和“秘密”之间的潜在的名称冲突,PHP知道该怎么办,给你:

object(Foo)#2 (2) { 
    ["Secret":"Foo":private]=> 
    string(39) "Private (after serialize/unserialize)" 
    ["FooSecret"]=> 
    string(38) "Public (after serialize/unserialize)" 
}