【发布时间】:2016-12-16 17:29:54
【问题描述】:
我序列化了对象,但反序列化后对象为空,我无法弄清楚我做错了什么。
这是我的代码:
class Foo implements \Serializable {
public $default = 10;
public $setMe;
public $removeOnSerialize = 'blah';
public function serialize()
{
unset($this->removeOnSerialze);
return serialize($this);
}
public function unserialzie($serialized)
{
$unserialized = unserialize();
$unserialize->removeOnSerialize = 'Set some value';
return $unserialized;
}
}
$obj = new Foo();
$obj->setMe = 9999;
print_r($obj) // here I have all as exepcted
$serialized = serialize($obj);
$unserialized = unserialize($serialized);
print_r($unserialized);
//object properties after deserialization
$unserialized->default === 10 // correct
$unserialized->removeOnSerialize === 'Set some value' //correct
$unserialized->setMe === NULL // wrong, it should be 9999
正如你在反序列化后看到的'setMe'属性是空的。 但是 'default' 和 'removeOnSerialize' 已经通过了。
有什么想法吗?
问候,
【问题讨论】:
-
这里有几个问题:
return serialize($this);你这样做是在序列化整个类。$unserialized = unserialize();需要传递一个参数来反序列化。看看here 它是如何工作的。 -
检查您的方法名称。你有
unserialzie,应该有unserialize。您的代码在复制/粘贴后无法正常工作 - 请按照错误和警告进行操作 - 它们会为您提供指导。
标签: php oop serialization