PHP对象反序列化:在序列化和反序列化之间,类定义是否必须保持相同?

时间:2013-12-16 16:10:19

标签: php oop serialization

阅读Does PHP serialize Object Methods?

后,我遇到了一个问题

特别是来自'BoltClock的独角兽'的声明

  

这当然假设你有完全相同的类定义   反序列化的时间

  1. 这是强制性的吗?

  2. 如果我故意想用改进的方法'更新'类定义怎么办?

  3. 我假设我仍然可以使用新的Class定义来反序列化,只要对类定义的更改完全在方法中并且预期的属性仍然存在。

    1. 如果新的类定义在序列化之前具有旧定义中不存在的新属性会发生什么?

    2. 在对从旧类定义中序列化的字符串进行反序列化时,它们是否只是填充了零?

    3. 非常感谢,

1 个答案:

答案 0 :(得分:0)

你为什么不试试?

class a{
  protected $p = 420;
  public function m(){ }
}

$s = serialize(new a());
apc_set('s', $s);

然后更改您的班级定义和unserialize(apc_fetch('a'));

当您在链接的答案中阅读时,方法不是序列化的,因此添加或删除方法不会影响反序列化。只要属性是公共的,它们就会被保留,或者它们是受保护/私有的,并且存在于修改后的类