PHP8.1新增

根底

Enum相似class

枚举的case能够定义0个或多个

枚举间比照没有意义,总是返回false。case是能够比照的

<?phpenum Colors{     case Red;     case Blue;     case Green;     public function getColor(): string     {         return $this->name;     } }function paintColor(Colors $colors): void{     echo "Paint : " . $colors->getColor() . PHP_EOL; }paintColor(Colors::Red);paintColor(Colors::Green);paintColor(Colors::Blue);/*     output :     ------------------------     Paint : Red     Paint : Green     Paint : Blue  */

回退枚举

case默认是类实现的,case能够赋值标量,这时case的类型会由简单类型转为简略类型,这种称为回退

回退枚举只有一个value属性

回退枚举实现了BackedEnuminterface,额定裸露了from()tryFrom()办法

枚举值必须是确定的,不能是可变的

<?phpenum Suit: string{    case Hearts = 'H';    case Diamonds = 'D';    case Clubs = 'C';    case Spades = 'S';}print Suit::Clubs->value;print Suit::from('H');print Suit::tryFrom('XX') ?? Suit::Hearts;

枚举办法

枚举能定义本人的办法、静态方法,也能实现interface,然而不反对继承

因为不反对继承所以拜访修饰符没什么用,都有public即可

<?phpinterface Colorful{    public function color(): string;}enum Suit implements Colorful{    case Hearts;    case Diamonds;    case Clubs;    case Spades;    // 满足 interface 契约。    public function color(): string    {        return match($this) {            Suit::Hearts, Suit::Diamonds => 'Red',            Suit::Clubs, Suit::Spades => 'Black',        };    }    // 不是 interface 的一部分;也没问题    public function shape(): string    {        return "Rectangle";    }        // 静态方法    public static function fromLength(int $cm): static    {        return match(true) {            $cm < 50 => static::Hearts,            $cm < 100 => static::Diamonds,            default => static::Clubs,        };    }    }function paint(Colorful $c) { ... }paint(Suit::Clubs);  // 失常print Suit::Diamonds->shape(); // 输入 "Rectangle"

枚举常量

<?phpenum Size{    case Small;    case Medium;    case Large;    public const Huge = self::Large;}

应用Trait

在enum中应用trait时,不容许trait中蕴含属性,只能存在办法、静态方法