상수 표현식의 열거형 값

케이스는 열거형 자체에서 상수로 표시되기 때문에 속성 기본값, 정적 변수 기본값, 매개변수 기본값, 전역 및 클래스 상수 값과 같은 대부분의 상수 표현식에서 정적 값으로 사용될 수 있습니다. 다른 enum 케이스 값에서는 사용할 수 없지만 일반 상수는 enum 케이스를 참조할 수 있습니다.

그러나 열거형에 대한 ArrayAccess와 같은 암시적 매직 메서드 호출은 결과 값이 결정적이거나 메서드 호출에 부작용이 없다는 것을 절대적으로 보장할 수 없으므로 정적 또는 상수 정의에서 허용되지 않습니다. 함수 호출, 메서드 호출 및 속성 액세스는 상수 식에서 계속 유효하지 않은 작업입니다.

                  
<?php
// This is an entirely legal Enum definition.
enum Direction implements ArrayAccess
{
    case Up;
    case Down;

    public function offsetGet($val) { ... }
    public function offsetExists($val) { ... }
    public function offsetSet($val) { throw new Exception(); }
    public function offsetUnset($val) { throw new Exception(); }
}

class Foo
{
    // This is allowed.
    const Bar = Direction::Down;

    // This is disallowed, as it may not be deterministic.
    const Bar = Direction::Up['short'];
    // Fatal error: Cannot use [] on enums in constant expression
}

// This is entirely legal, because it's not a constant expression.
$x = Direction::Up['short'];
?>