如果我将一个成员添加到类定义中,是否可以反序列化存储的对象?

时间:2017-04-20 18:15:34

标签: php class serialization

我有一堆序列化的对象并存储在我的数据库中。在这些对象的类定义中,我添加了一个新成员。当我反序列化对象时,是否会遇到错误,因为序列化对象没有包含该成员?

class foo {
  public $alpha = NULL;
}

$myobject = new foo();
$myobject->foo = "This is my original object."

$saved_object = serialize($myobject);
db_save_myobject($saved_object);

我保存后,我改变了foo类......

class foo {
  public $alpha = NULL;
  public $bravo = NULL;
}

现在我想从我的数据库中获取

$myobject = db_get_myobject();

$ myobject现在是否有一个空的bravo成员?

1 个答案:

答案 0 :(得分:1)

对于简单的类,它可以正常工作。

除非在序列化之前为$myobject->bravo = 123;分配了类似内容,否则您将获得$ bravo = NULL。然后它会留下$ bravo = 123。

如果类或其中一个父类实现Serializable或在__sleep或__wakeup中做了一些时髦的事情,则可能会遇到麻烦。