Traits

Les énumérations peuvent s'appuyer sur des traits, qui se comportent de la même manière que les classes. La précondition est que les traits utilisés dans une énumération ne doivent pas contenir de propriétés. Ils ne peuvent inclure que des méthodes, des méthodes statiques et des constantes. Un trait contenant des propriétés entraînera une erreur fatale.

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

User Contributed Notes 1 note

up
17
wervin at mail dot com
1 year ago
One good example of a trait, would be to give a lot of enums a method to retrieve their cases, values or both.<?phptrait EnumToArray{    public static function names(): array    {        return array_column(self::cases(), 'name');            }    public static function values(): array    {        return array_column(self::cases(), 'value');    }    public static function asArray(): array    {        if (empty(self::values())) {            return self::names();        }                if (empty(self::names())) {            return self::values();        }                return array_column(self::cases(), 'value', 'name');    }}?>Some example outputs:<?phpvar_export(IpVersion::names());     // ['Ipv4', 'IPv6']var_export(IpVersion::values());    // []var_export(IpVersion::asArray());   // ['IPv4', 'IPv6']var_export(Language::names());      // ['en', 'es']var_export(Language::values());     // ['English', 'Spanish']var_export(Language::asArray());    // ['en' => 'English', 'es' => 'Spanish']
To Top