2011-02-28 113 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)" 
}