【问题标题】:PHP Object Unserializing: Must the Class definition remain identical between serializing and unserializing?PHP 对象反序列化:类定义在序列化和反序列化之间必须保持相同吗?
【发布时间】:2014-01-04 02:35:12
【问题描述】:
看了Does PHP serialize Object Methods?之后有个问题
尤其是“BoltClock 是独角兽”的声明
这当然假设您在
反序列化时间
这是强制性的吗?
如果我有意使用改进的方法“更新”类定义怎么办?
我假设我仍然可以使用新的类定义进行反序列化,只要对类定义的更改纯粹在方法中并且预期的属性仍然存在。
如果新的类定义具有序列化之前旧定义中不存在的新属性会怎样?
在反序列化从旧类定义序列化的字符串时,它们是否只是用零填充?
非常感谢,
【问题讨论】:
标签:
php
oop
serialization
【解决方案1】:
你为什么不试试呢?
class a{
protected $p = 420;
public function m(){ }
}
$s = serialize(new a());
apc_set('s', $s);
然后更改你的类定义和unserialize(apc_fetch('a'));
方法未序列化,正如您在链接答案中所读到的,因此添加或删除方法不会影响反序列化。只要属性是公共的,或者它们是受保护的/私有的并存在于修改后的类中,它们就会被保留