Трейты

В перечисления разрешено включать трейты, которые будут вести себя как классы. Предостережение состоит в том, что во включаемых (use) в перечисление трейтах нельзя объявлять свойства. Во включаемом в перечисление трейте разрешено объявлять только методы и статические методы. Трейт со свойствами приведёт к фатальной ошибке.

<?php

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

trait
Rectangle
{
public function
shape(): string {
return
"Прямоугольник";
}
}

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 => 'Красный',
Suit::Clubs, Suit::Spades => 'Чёрный',
};
}
}
?>