## 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

    enum Suit: string
    {
        case Hearts = 'H';
        case Diamonds = 'D';
        case Clubs = 'C';
        case Spades = 'S';
    }

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open