CakeFest 2024: The Official CakePHP Conference

Serialisierung

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

User Contributed Notes

There are no user contributed notes for this page.
To Top