PHP.nl

Serialization

Serialisatie

Enumeraties worden anders geserialiseerd dan objecten. Specifiek hebben ze een nieuwe serialisatiecode, die de naam van de enum-case specificeert. De deserialisatie-routine kan dat vervolgens gebruiken om een variabele in te stellen op de bestaande singleton-waarde. Dat zorgt ervoor dat: "E"

<?php

Suit::Hearts === unserialize(serialize(Suit::Hearts));

print serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>

Bij deserialisatie, als een enum en case niet kunnen worden gevonden die overeenkomen met een geserialiseerde waarde, zal er een waarschuwing worden gegeven en zal false worden geretourneerd.

Als een Pure Enum naar JSON wordt geserialiseerd, zal er een fout worden gegooid. Als een Backed Enum naar JSON wordt geserialiseerd, zal deze alleen worden weergegeven door zijn scalare waarde, in het juiste type. Het gedrag van beide kan worden overschreven door JsonSerializable te implementeren.

Voor print_r is de uitvoer van een enum-case iets anders dan die van objecten om verwarring te minimaliseren.

<?php

enum Foo {
    case Bar;
}

enum Baz: int {
    case Beep = 5;
}

print_r(Foo::Bar);
print_r(Baz::Beep);

/* Produceert

Foo Enum (
    [name] => Bar
)
Baz Enum:int {
    [name] => Beep
    [value] => 5
}
*/
?>

Documentatie