Перечисления сериализуются иначе, чем объекты. В частности, у них есть новый код сериализации "E", который указывает имя случая перечисления. Затем процедура десериализации может использовать это, чтобы установить переменную в существующее одноэлементное значение. Это гарантирует, что:

<?php
Suit::Hearts === unserialize(serialize(Suit::Hearts));

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

При десериализации, если не удается найти перечисление и регистр, соответствующие сериализованному значению, будет выдано и falseвозвращено предупреждение.

Если Pure Enum сериализуется в JSON, будет выдана ошибка. Если Backed Enum сериализуется в JSON, оно будет представлено только своим скалярным значением в соответствующем типе. Поведение обоих может быть переопределено реализацией JsonSerializable .

Для print_r() вывод случая enum немного отличается от объектов, чтобы минимизировать путаницу.

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