Serialization

Оновлено: 09.05.2023

Зчислення серіалізуються інакше, ніж об'єкти. Зокрема, вони мають новий код серіалізації, "E", який визначає назву регістру перечислення. Процедура десеріалізації може використовувати цей код для встановлення змінній існуючого однозначного значення. Це гарантує наступне:

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

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

При десеріалізації, якщо не вдасться знайти перерахування та регістр, що відповідають серіалізованому значенню, буде видано попередження та повернуто помилкове значення.

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

Для print_r() виведення випадку перерахування дещо відрізняється від виведення об'єктів, щоб мінімізувати плутанину.

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