【问题标题】: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 是独角兽”的声明

这当然假设您在 反序列化时间

  1. 这是强制性的吗?

  2. 如果我有意使用改进的方法“更新”类定义怎么办?

我假设我仍然可以使用新的类定义进行反序列化,只要对类定义的更改纯粹在方法中并且预期的属性仍然存在。

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

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

非常感谢,

【问题讨论】:

    标签: php oop serialization


    【解决方案1】:

    你为什么不试试呢?

    class a{
      protected $p = 420;
      public function m(){ }
    }
    
    $s = serialize(new a());
    apc_set('s', $s);
    

    然后更改你的类定义和unserialize(apc_fetch('a'));

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2014-12-24
      • 2013-04-11
      相关资源
      最近更新 更多