枚舉的序列化不同于對(duì)象。
尤其是它們有新的序列化代碼:
"E"
,指示了 enum 條目名稱。
然后反序列化動(dòng)作能夠設(shè)置變量為現(xiàn)有的單例值。
確保那樣:
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
如果枚舉和它的條目在反序列化時(shí),無(wú)法匹配序列化的值,
會(huì)導(dǎo)致 warning 警告,并返回 false
。
把純粹枚舉序列化為 JSON 將會(huì)導(dǎo)致錯(cuò)誤。 把回退枚舉序列化為 JSON 時(shí),僅會(huì)用標(biāo)量值的形式,以合適的類型表達(dá)。 可通過(guò)實(shí)現(xiàn) JsonSerializable 來(lái)重載序列化行為。
對(duì)于 print_r(),輸出的枚舉條目略微不同于對(duì)象, 能減少迷惑。
<?php
enum Foo {
case Bar;
}
enum Baz: int {
case Beep = 5;
}
print_r(Foo::Bar);
print_r(Baz::Beep);
/* 產(chǎn)生
Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>