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
質問する
663 次
2 に答える
2
ドキュメントに従って:
データがシリアライズ解除されると、クラスが認識され、__construct() を呼び出す代わりに、適切な unserialize() メソッドがコンストラクタとして呼び出されます。標準コンストラクターを実行する必要がある場合は、メソッドで実行できます
また、使用時にロジックを実行していないため、実装する代わりに_seelp() および __wakeup() マジック メソッドserialize()
をオーバーライドするだけで済みます。何かのようなもの:serializable
class foo
{
public function __wakeup() {
// Do your logic here
}
}
$foo = new foo();
var_dump(unserialize(serialize($foo)));
于 2013-03-12T20:51:30.983 に答える
1
class foo implements serilizable
する必要があります:
class foo implements serializable
単純なスペルミス
于 2013-03-12T20:25:15.237 に答える