序列化不与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 
+0

对象序列化吗?或者,也许问题是在非序列化? – Voitcus 2013-03-12 20:25:12

+0

@volitcus它不会遇到任何错误。和'var_dump(unserialize(serialize($ this-> object)))''返回的对象,但只有默认的属性值(写在OP中的注释) – varuog 2013-03-12 20:29:28

+0

但var_dump(serialize($ this-> object) );'返回? – Voitcus 2013-03-12 20:31:50

由于每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 

只是一个简单的拼写错误

+0

抱歉,这是我的错误。实际的代码是可以的。更新了问题。问题依然存在。 – varuog 2013-03-12 20:28:04

+0

我会把它带出一个类,只是使用内置的序列化函数 – 2013-03-12 20:30:56

+0

没有可序列化的接口,如果我直接序列化,我马上得到这个错误'致命的错误:找不到执行方法bar :: serialize在未知line 0' bar class的一个对象是foo类的属性。不知何故,它不是序列化嵌套的对象。 – varuog 2013-03-12 20:39:48