Rasgos (Traits)

Las enumeraciónes pueden aprovechar los rasgos, que se comportarán igual que en las clases. La advertencia es que los rasgos use (usados) en una enumeración no deben contener propiedades. Solo pueden incluir métodos, métodos estáticos y constantes. Un rasgo con propiedades resultará en un error fatal.

<?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',
};
}
}
?>