PHP8 序列化
枚举的序列化不同于对象。 尤其是它们有新的序列化代码: "E",指示了 enum 条目名称。 然后反序列化动作能够设置变量为现有的单例值。 确保那样:
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
如果枚举和它的条目在反序列化时,无法匹配序列化的值, 会导致 warning 警告,并返回 false。
把纯粹枚举序列化为 JSON 将会导致错误。 把回退枚举序列化为 JSON 时,仅会用标量值的形式,以合适的类型表达。 可通过实现 JsonSerializable 来重载序列化行为。
对于 print_r(),输出的枚举条目略微不同于对象, 能减少迷惑。
<?php
enum Foo {
case Bar;
}
enum Baz: int {
case Beep = 5;
}
print_r(Foo::Bar);
print_r(Baz::Beep);
/* 产生
Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>