Las enumeraciónes 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 la enumeración. El rutina de deserialización es capaz de
usar eso para establecer una variable en el valor singleton existente. Eso asegura que:
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
Durante la deserialización, si no se puede encontrar un caso de enumeración que coincida con un valor serializado,
se emitirá una advertencia y se devolverá false
.
Si un Enum Puro se serializa a JSON, se lanzará un error. Si un Enum Respaldado se serializa a JSON, se representará solo por su valor escalar, en el tipo apropiado. El comportamiento de ambos puede ser anulado 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);
/* Imprime:
Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>