PHP枚举

简介: PHP语言8.1版本新增枚举类型


基础

Enum类似class

枚举的case可以定义0个或多个

枚举间对比没有意义,总是返回false。case是可以对比的

<?php

 

enumColors

{

    caseRed;

    caseBlue;

    caseGreen;

 

    publicfunctiongetColor(): string

    {

        return$this->name;

    }

}

 

functionpaintColor(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()方法

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

<?php

enumSuit: string

{

   caseHearts='H';

   caseDiamonds='D';

   caseClubs='C';

   caseSpades='S';

}

 

printSuit::Clubs->value;

printSuit::from('H');

printSuit::tryFrom('XX') ??Suit::Hearts;

枚举方法

枚举能定义自己的方法、静态方法,也能实现interface,但是不支持继承

因为不支持继承所以访问修饰符没什么用,都有public即可

<?php

interfaceColorful

{

   publicfunctioncolor(): string;

}

 

enumSuitimplementsColorful

{

   caseHearts;

   caseDiamonds;

   caseClubs;

   caseSpades;

 

   // 满足 interface 契约。

   publicfunctioncolor(): string

   {

       returnmatch($this) {

           Suit::Hearts, Suit::Diamonds=>'Red',

           Suit::Clubs, Suit::Spades=>'Black',

       };

   }

 

   // 不是 interface 的一部分;也没问题

   publicfunctionshape(): string

   {

       return"Rectangle";

   }

   

   // 静态方法

   publicstaticfunctionfromLength(int$cm): static

   {

       returnmatch(true) {

           $cm<50=>static::Hearts,

           $cm<100=>static::Diamonds,

           default=>static::Clubs,

       };

   }

   

}

 

functionpaint(Colorful$c) { ... }

 

paint(Suit::Clubs);  // 正常

 

printSuit::Diamonds->shape(); // 输出 "Rectangle"

枚举常量

<?php

enumSize

{

    caseSmall;

   caseMedium;

   caseLarge;

 

   publicconstHuge=self::Large;

}

使用Trait

在enum中使用trait时,不允许trait中包含属性,只能存在方法、静态方法


目录
相关文章
|
存储 PHP
PHP 常量
PHP 常量
41 0
|
PHP 数据库
PHP 数据类型
PHP 数据类型
41 0
|
PHP
PHP 变量
PHP 变量
35 0
|
PHP
PHP 数据类型 - 判断
PHP 数据类型 - 判断
46 0
|
6月前
|
存储 数据处理 PHP
PHP变量类型
PHP变量类型
52 0
|
11月前
|
JavaScript PHP
【PHP学习】—PHP的基本数据类型(二)
【PHP学习】—PHP的基本数据类型(二)
|
存储 数据库连接 PHP
PHP 数据类型--详解
PHP 数据类型--详解
|
存储 PHP
PHP——变量
PHP——变量
PHP之常量
常量不需要使用"$"符号,一旦使用被认为是变量
91 0
PHP之常量
|
存储 PHP
PHP之变量
1、变量是用来存储数据的 2、变量是存在名字的 3、变量是通过名字访问数据的 4、变量的数据是可以改变的
103 0
PHP之变量