0
 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
4

2 に答える 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 に答える