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
}
*/
?>