Сериализация

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

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

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

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

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

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

<?php
enum Foo 
{
    case 
Bar;
}

enum Bazint {
    case 
Beep 5;
}

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

/* Выводит

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

User Contributed Notes

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