2024 年 PHP 日本研討會

序列化

列舉的序列化方式與物件不同。具體來說,它們有一個新的序列化代碼 "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