PHP 7.4 的向后不兼容更改列表包含以下注释:
序列化
o 序列化格式已被删除。由于它从未由 PHP 生成,因此这可能只会破坏手动制作的字符串的反序列化。
(请注意,这是指用于对象序列化的小格式o
,而不是大格式。)O
似乎这从未由 PHP 的serialize()
函数生成,但该注释存在的事实意味着它已被unserialize()
函数识别。
我做了一个小测试小提琴 (3v4l.org),这表明这不仅仅是 big- 的同义词O
,这将是一个明显的可能性。
小提琴通过输出的错误消息中的差异公开了 PHP 中的更改。在 PHP >= 7.4 中,我们在位置 0(o
遇到 的位置)出现错误,而在 7.4 之前,错误在位置 5(数据所在的位置)报告。这意味着它o
已被识别,但数据格式错误,这与我上面已经推断的内容相关。
那么,o
序列化格式是什么,它反序列化为什么,如果 PHP 本身没有实际生成它,为什么它支持这样的特性?