Las enumeraciones se serializan de manera diferente a los objetos. Específicamente, tienen un nuevo código de serialización,
"E", que especifica el nombre del caso de enumeración. La rutina de deserialización puede entonces
usar eso para establecer una variable al valor singleton existente. Eso asegura que:
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
Al deserializar, si no se puede encontrar una enumeración y un caso para coincidir con un valor serializado,
se emitirá una advertencia y se devolverá false.
Si una Enumeración Pura se serializa a JSON, se lanzará un error. Si una Enumeración Respaldada se serializa a JSON, estará representada solo por su valor escalar, en el tipo apropiado. El comportamiento de ambas puede ser sobrescrito implementando JsonSerializable.
Para print_r(), la salida de un caso de enumeración es ligeramente diferente de los objetos para minimizar la confusión.
<?php
enum Foo {
case Bar;
}
enum Baz: int {
case Beep = 5;
}
print_r(Foo::Bar);
print_r(Baz::Beep);
/* Produce
Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>