列挙型をシリアライズする

列挙型は、オブジェクトとは違う形でシリアライズされます。 特別に、列挙型には case 名を指定する新しいシリアライズコード "E" が付与されています。 デシリアライズのルーチンはそれを使って、 既存のシングルトンの値を変数に設定できます。 これにより、以下のようなコードが動作することが保証されます:

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

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

デシリアライズする際に、 マッチする列挙型と case がシリアライズした値に見つからなかった場合は、 警告が発生し、false が返されます。

Pure Enum を JSON にシリアライズしようとすると、 Error がスローされます。 Backed Enum を JSON にシリアライズしようとすると、 適切な型の、スカラーの値だけが表現されます。 これらの振る舞いは、 JsonSerializable をオーバーライドすることで上書きできます。

print_r() 向けに、 列挙型の case の出力はオブジェクトと少し違う形式になっています。 これは、混乱を最小限に抑えるためです。

<?php
enum Foo 
{
    case 
Bar;
}

enum Bazint {
    case 
Beep 5;
}

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

/* 上記は、以下を出力

Foo Enum (
    [name] => Bar
)
Baz Enum:int {
    [name] => Beep
    [value] => 5
}
*/
?>
関連キーワード:  Enum, case, しよう, オブジェクト, コード, デシリアライズ, リスト, 混乱, 形式, 出力