CakeFest 2024: The Official CakePHP Conference

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

Перечисления сериализуются иначе, чем объекты. В частности, у перечислений есть новый код сериализации — «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
Baz: int {
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

User Contributed Notes

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