직렬화

열거형은 개체와 다르게 직렬화됩니다. 특히 enum 케이스의 이름을 지정하는 새로운 직렬화 코드 "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
}
*/
?>