2
所以根据定义,在序列化时,类中的私人数字前缀为类名称。这对我来说是一个问题,我希望能够序列化/保存/反序列化一个确切的对象,但是PHP所做的就是给我一个私人数字的类名+变量名的其他变体。php反序列化与私人成员
有什么办法可以轻松地反序列化私人成员?
感谢,
所以根据定义,在序列化时,类中的私人数字前缀为类名称。这对我来说是一个问题,我希望能够序列化/保存/反序列化一个确切的对象,但是PHP所做的就是给我一个私人数字的类名+变量名的其他变体。php反序列化与私人成员
有什么办法可以轻松地反序列化私人成员?
感谢,
您不必担心系列化的,除非你的类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)"
}
这应该自动发生反序列化。你能提供一个错误发生的例子吗? – Hamish 2011-02-28 03:12:28