序列化

枚舉的序列化不同于對(duì)象。 尤其是它們有新的序列化代碼: "E",指示了 enum 條目名稱。 然后反序列化動(dòng)作能夠設(shè)置變量為現(xiàn)有的單例值。 確保那樣:

<?php
Suit
::Hearts === unserialize(serialize(Suit::Hearts));

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

如果枚舉和它的條目在反序列化時(shí),無法匹配序列化的值, 會(huì)導(dǎo)致 warning 警告,并返回 false。

把純粹枚舉序列化為 JSON 將會(huì)導(dǎo)致錯(cuò)誤。 把回退枚舉序列化為 JSON 時(shí),僅會(huì)用標(biāo)量值的形式,以合適的類型表達(dá)。 可通過實(shí)現(xiàn) JsonSerializable 來重載序列化行為。

對(duì)于 print_r(),輸出的枚舉條目略微不同于對(duì)象, 能減少迷惑。

<?php
enum Foo 
{
    case 
Bar;
}

enum Bazint {
    case 
Beep 5;
}

print_r(Foo::Bar);
print_r(Baz::Beep);

/* 產(chǎn)生

Foo Enum (
    [name] => Bar
)
Baz Enum:int {
    [name] => Beep
    [value] => 5
}
*/
?>