기본 열거형

열거형은 클래스와 유사하며 클래스, 인터페이스 및 특성과 동일한 네임스페이스를 공유합니다. 또한 같은 방식으로 자동 로드할 수 있습니다. Enum은 고정된 제한된 수의 가능한 법적 값을 갖는 새로운 유형을 정의합니다.

                  
<?php
enum Suit
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;
}
?>
                  
                

이 선언은 4개의 법적 값인 Suit::Hearts, Suit::Diamonds, Suit::ClubsSuit::Spades만 있는 Suit라는 새로운 열거 유형을 만듭니다. 변수는 이러한 법적 값 중 하나에 할당될 수 있습니다. 열거형에 대해 함수의 유형을 검사할 수 있으며, 이 경우 해당 유형의 값만 전달할 수 있습니다.

                  
<?php
function pick_a_card(Suit $suit) { ... }

$val = Suit::Diamonds;

// OK
pick_a_card($val);
// OK
pick_a_card(Suit::Clubs);
// TypeError: pick_a_card(): Argument #1 ($suit) must be of type Suit, string given
pick_a_card('Spades');
?>
                  
                

열거형에는 최대값이 없는 0개 이상의 case 정의가 있을 수 있습니다. 0 케이스 열거형은 오히려 쓸모가 없는 경우 구문적으로 유효합니다.

기본적으로 케이스는 기본적으로 스칼라 값으로 뒷받침되지 않습니다. 즉, Suit::Hearts"0"이 아닙니다. 대신, 각 케이스는 해당 이름의 싱글톤 객체에 의해 뒷받침됩니다. 즉:

                  
<?php
$a = Suit::Spades;
$b = Suit::Spades;

$a === $b; // true

$a instanceof Suit;  // true
?>
                  
                

이는 또한 열거형 값이 서로 < 또는 >가 아님을 의미합니다. 이러한 비교는 개체에서 의미가 없기 때문입니다. 열거형 값으로 작업할 때 이러한 비교는 항상 false를 반환합니다.

관련 데이터가 없는 이러한 유형의 케이스를 "순수 케이스"라고 합니다. Pure Case만 포함하는 Enum을 Pure Enum이라고 합니다.

모든 Pure Case는 열거형 유형의 인스턴스로 구현됩니다. 열거형은 내부적으로 클래스로 표현됩니다.

모든 사례에는 사례 자체의 대소문자를 구분하는 name인 읽기 전용 속성이 있습니다. 이는 때때로 디버깅 목적으로 유용할 수 있습니다.

                  
<?php
print Suit::Spades->name;
// prints "Spades"
?>