1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
--TEST--
Backed Enum with multiple implementing interfaces
--FILE--
<?php
interface Colorful {
public function color(): string;
}
interface Shaped {
public function shape(): string;
}
interface ExtendedShaped extends Shaped {
}
enum Suit: string implements Colorful, ExtendedShaped {
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
public function color(): string {
return match ($this) {
self::Hearts, self::Diamonds => 'Red',
self::Clubs, self::Spades => 'Black',
};
}
public function shape(): string {
return match ($this) {
self::Hearts => 'heart',
self::Diamonds => 'diamond',
self::Clubs => 'club',
self::Spades => 'spade',
};
}
}
echo Suit::Hearts->color() . "\n";
echo Suit::Hearts->shape() . "\n";
echo Suit::Diamonds->color() . "\n";
echo Suit::Diamonds->shape() . "\n";
echo Suit::Clubs->color() . "\n";
echo Suit::Clubs->shape() . "\n";
echo Suit::Spades->color() . "\n";
echo Suit::Spades->shape() . "\n";
?>
--EXPECT--
Red
heart
Red
diamond
Black
club
Black
spade
|