Перечисления сериализуются иначе, чем объекты. В частности, у них есть новый код сериализации "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
}
*/
?>
0 комментариев