Serialization
Serialization
Enumerations are serialized differently from objects. Specifically, they have a new serialization code,
, that specifies the name of the enum case. The deserialization routine is then
able to use that to set a variable to the existing singleton value. That ensures that:
"E"
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
On deserialization, if an enum and case cannot be found to match a serialized value a warning will be issued and false returned.
If a Pure Enum is serialized to JSON, an error will be thrown. If a Backed Enum
is serialized to JSON, it will be represented by its scalar value only, in the
appropriate type. The behavior of both may be overridden by implementing
.
JsonSerializable
For , the output of an enum case is slightly different
from objects to minimize confusion.
print_r
<?php
enum Foo {
case Bar;
}
enum Baz: int {
case Beep = 5;
}
print_r(Foo::Bar);
print_r(Baz::Beep);
/* Produces
Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>