В перечисления разрешается включать трейты, которые будут вести себя как в классе.
Предостережение состоит в том, что во включаемых (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 => 'Чёрный',
};
}
}
?>