Traits

Enumerações podem utilizar traits, que se comportam da mesma maneira que nas classes. A limitação é que usados com use em uma enum não podem conter propriedades. Eles podem incluir apenas métodos e métodos estáticos. Um trait com propriedades resultará em um erro fatal.

<?php

interface Colorido
{
    public function cor(): string;
}

trait Retangulo
{
    public function shape(): string {
        return "Retângulo";
    }
}

enum Naipe implements Colorido
{
    use Retangulo;

    case Copas;
    case Ouros;
    case Paus;
    case Espadas;

    public function cor(): string
    {
        return match($this) {
            Naipe::Copas, Naipe::Ouros => 'Vermelho',
            Naipe::Paus, Naipe::Espadas => 'Preto',
        };
    }
}
?>