Aufzählungen werden anders serialisiert als Objekte. Insbesondere haben sie
einen neuen Serialisierungscode "E"
, der den Namen des
Enum-Falls angibt. Die Deserialisierungsroutine ist dann in der Lage,
diesen Code zu verwenden, um eine Variable auf den vorhandenen
Singleton-Wert zu setzen. Dadurch ist Folgendes gewährleistet:
<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));
print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>
Wenn bei der Deserialisierung kein Enum und kein Fall gefunden wird, der
mit einem serialisierten Wert übereinstimmt, wird eine Warnung ausgegeben
und false
zurückgegeben.
Wenn eine Pure Enum in JSON serialisiert wird, wird ein Fehler ausgelöst. Wenn eine Backed Enum in JSON serialisiert wird, wird sie nur durch ihren skalaren Wert im entsprechenden Typ dargestellt. Das Verhalten von beiden kann durch die Implementierung von JsonSerializable überschrieben werden.
Um Verwechslungen zu vermeiden, unterscheidet sich die Ausgabe bei print_r() leicht von der bei Objekten.
<?php
enum Foo {
case Bar;
}
enum Baz: int {
case Beep = 5;
}
print_r(Foo::Bar);
print_r(Baz::Beep);
/* Ergibt
Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>