Les énumérations sont sérialisées différemment des objets. En particulier, elles ont un nouveau code de sérialisation,
"E"
, qui spécifie le nom du cas de l'énumération. La routine de désérialisation est alors
en mesure d'utiliser ce code pour définir une variable à la valeur singleton existante. Cela garantit que :
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
Lors de la désérialisation, si un enum et un cas ne peuvent pas être trouvés pour correspondre à une valeur sérialisée,
un avertissement sera émis et un false
sera retourné.
Si une Enum pure est sérialisée en JSON, une erreur sera générée. Si une Enum avec valeur de base est sérialisée en JSON, elle sera représentée par sa valeur scalaire uniquement, dans le type approprié. Le comportement des deux peut être surchargé en implémentant la méthode JsonSerializable.
Pour print_r(), la sortie d'un cas d'enum est légèrement différente de celle des objets afin de minimiser la confusion.
<?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
}
*/
?>