序列化不与Serializable接口工作
问题描述:
class foo implements serializable
{
public function serialize() {
return serialize($this);
}
public function unserialize($serialized)
{
//Revive connection
AbstractContent::$connection= DatabaseHandle::getConnection();
return unserialize($serialized);
}
}
var_dump($this->object); //$this object is instance of class foo returns the exact dump of objects with correc property
var_dump(unserialize(serialize($this->object))); //Does not dump correctly. only default property values are evaluated, constructor assigned values are ignored, computed values are ignored
答
由于每docs:
When the data is unserialized the class is known and the appropriate unserialize() method is called as a constructor instead of calling __construct(). If you need to execute the standard constructor you may do so in the method
而且,你没有做任何逻辑当使用serialize()
时,您可以轻松覆盖_seelp() and __wakeup() magic methods而不是实施serializable
。例如:
class foo
{
public function __wakeup() {
// Do your logic here
}
}
$foo = new foo();
var_dump(unserialize(serialize($foo)));
答
class foo implements serilizable
应该是:
class foo implements serializable
只是一个简单的拼写错误
对象序列化吗?或者,也许问题是在非序列化? – Voitcus 2013-03-12 20:25:12
@volitcus它不会遇到任何错误。和'var_dump(unserialize(serialize($ this-> object)))''返回的对象,但只有默认的属性值(写在OP中的注释) – varuog 2013-03-12 20:29:28
但var_dump(serialize($ this-> object) );'返回? – Voitcus 2013-03-12 20:31:50