트레이트

트레이트 (Traits)

열거형에 트레이트(trait)를 사용하는 방법을 다룹니다. 열거형에서 트레이트를 쓸 때의 제약, 특히 속성(property)을 포함할 수 없다는 점을 살펴봅니다.

출처: Traits

본문

Enum은 트레이트를 사용할 수 있으며, 클래스에서와 동일하게 동작합니다. 단, enum에 사용되는 트레이트는 속성(property)을 포함하면 안 된다는 주의사항이 있습니다. 메서드, 정적 메서드, 상수만 포함할 수 있습니다. 속성이 있는 트레이트는 치명적 오류(fatal error)를 일으킵니다.

<?php

interface Colorful
{
    public function color(): string;
}

trait Rectangle
{
    public function shape(): string
    {
        return "Rectangle";
    }
}

enum Suit implements Colorful
{
    use Rectangle;

    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;

    public function color(): string
    {
        return match ($this) {
            Suit::Hearts, Suit::Diamonds => 'Red',
            Suit::Clubs, Suit::Spades => 'Black',
        };
    }
}

$suit = Suit::Spades;
var_dump($suit->color());
var_dump($suit->shape());

더 알아보기