PHP Conference Japan 2024

序列化

枚举的序列化方式与对象的序列化方式不同。具体来说,它们具有一个新的序列化代码 "E",该代码指定枚举情况的名称。然后,反序列化例程能够使用它将变量设置为现有的单例值。这确保了

<?php

Suit
::Hearts === unserialize(serialize(Suit::Hearts));

print
serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>

在反序列化时,如果找不到与序列化值匹配的枚举和情况,则会发出警告并返回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
}
*/
?>
添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top