【问题标题】:Can I unserialize an stored object if I added a member to the class definition?如果我将成员添加到类定义中,我可以反序列化存储的对象吗?
【发布时间】:2017-09-17 12:38:44
【问题描述】:

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

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 现在会有一个 null bravo 成员吗?

【问题讨论】:

  • 能否提供代码?
  • “当我反序列化对象时,会不会遇到错误” 试一试会发生什么?

标签: php class serialization


【解决方案1】:

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

你会得到 $bravo = NULL,除非你在序列化之前分配了类似$myobject->bravo = 123; 的东西。然后它会保持 $bravo = 123。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多