Examples

예제 #1 기본 제한 값

                  
<?php
enum SortOrder
{
    case ASC;
    case DESC;
}

function query($fields, $filter, SortOrder $order = SortOrder::ASC) { ... }
?>
                  
                

query() 함수는 이제 $orderSortOrder::ASC 또는 SortOrder::ASC로 보장된다는 사실을 알고 안전하게 진행할 수 있습니다. 다른 값은 TypeError가 발생하므로 더 이상의 오류 검사나 테스트가 필요하지 않습니다.

예제 #2 고급 배타적 값

                  
<?php
enum UserStatus: string
{
    case Pending = 'P';
    case Active = 'A';
    case Suspended = 'S';
    case CanceledByUser = 'C';

    public function label(): string
    {
        return match($this) {
            static::Pending => 'Pending',
            static::Active => 'Active',
            static::Suspended => 'Suspended',
            static::CanceledByUser => 'Canceled by user',
        };
    }
}
?>
                  
                

이 예에서 사용자의 상태는 UserStatus::Pending, UserStatus::Active, UserStatus::Suspended 또는 UserStatus::CanceledByUser 중 하나일 수 있습니다. 함수는 UserStatus에 대해 매개변수를 입력한 다음 이 네 가지 값인 마침표만 수락할 수 있습니다.

네 가지 값 모두 사람이 읽을 수 있는 문자열을 반환하는 label() 메서드가 있습니다. 이 문자열은 데이터베이스 필드나 HTML 선택 상자에서 사용할 수 있는 "머신 이름" 스칼라 문자열과 무관합니다.

                  
<?php
foreach (UserStatus::cases() as $case) {
    printf('<option value="%s">%s</option>\n', $case->value, $case->label());
}
?>