【发布时间】:2011-02-28 03:02:04
【问题描述】:
所以根据定义,类中的私有编号在序列化时以类名作为前缀。这给我带来了一个问题,我希望能够序列化/保存/反序列化一个确切的对象,无论 php 做什么都是给我另一个类名+变量名的变量用于私人号码。
有什么方法可以轻松地反序列化私人成员?
谢谢,
【问题讨论】:
-
这应该通过反序列化自动发生。你能提供一个发生错误的例子吗?
标签: php serialization
所以根据定义,类中的私有编号在序列化时以类名作为前缀。这给我带来了一个问题,我希望能够序列化/保存/反序列化一个确切的对象,无论 php 做什么都是给我另一个类名+变量名的变量用于私人号码。
有什么方法可以轻松地反序列化私人成员?
谢谢,
【问题讨论】:
标签: php serialization
除非您的类实现了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”和“Secret”之间存在潜在的名称冲突,PHP 也知道该怎么做并为您提供:
object(Foo)#2 (2) {
["Secret":"Foo":private]=>
string(39) "Private (after serialize / unserialize)"
["FooSecret"]=>
string(38) "Public (after serialize / unserialize)"
}
【讨论】: