2.7PHP类型之枚举(Enum)

枚举(Enum)本质上也是一个类。

枚举体可以包含常量、静态方法、实例方法、魔术方法(仅支持 __call()__callStatic()__invoke()),不可以有 静态属性、实例属性、构造函数、析构函数。

枚举是隐式的 final 类,不可以继承。

枚举不可以像类一样直接使用 new 实例化,条目(case)是该枚举类的单例对象,而条目本质上又是类常量,所以语法为 枚举名::条目名;

枚举可以实现接口。

枚举可以 use 使用 trait,但与类不同的是:trait 只可以包含静态方法、实例方法。

枚举和条目都可以有注解。

枚举中的常量、静态方法、实例方法的可见性支持 publicprotectedprivate

1.纯粹(Pure)枚举

没有值的条目(case),被称为纯粹(Pure)条目。仅包含纯粹条目的枚举被称为纯粹(Pure)枚举。

注意:纯粹条目没有隐式的值。

enum 枚举名
{
    case 条目名1;
    case 条目名2;
    case 条目名N;
}

2.回退(Backed)枚举

有值的条目(case),被称为回退(Backed)条目。仅包含回退条目的枚举被称为回退(Backed)枚举。

回退枚举名后的类型可以为 intstring,表示所有条目的类型必须为 intstring,且一次只支持一种类型(即不支持联合类型 int | string)。

回退条目的值不会隐式自动生成(比如:类似于数组的索引),所以必须显式定义且必须唯一。

enum 枚举名: 类型
{
    case 条目名1 = 值1;
    case 条目名2 = 值2;
    case 条目名N = 值N;
}

3.访问成员

枚举名::常量名;
枚举名::静态方法名();
枚举名::条目名->实例方法名();
枚举名::条目名->只读实例属性名;

纯粹条目只有一个只读(readonly)属性:name,返回值是条目名称。

enum Suit
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;
}

print Suit::Spades->name;

//输出
Spades

回退条目有两个只读(readonly)属性 namevaluevalue 的返回值为回退条目的值。

enum Suit: string
{
    case Hearts = 'H';
    case Diamonds = 'D';
    case Clubs = 'C';
    case Spades = 'S';
}

print Suit::Clubs->name;
print Suit::Clubs->value;

//输出
Clubs
C

纯粹枚举和回退枚举都实现了 UnitEnum 接口,UnitEnum 接口有一个 cases() 静态方法。cases() 静态方法返回一个数组,数组中的元素为枚举的所有条目(按照条目声明时的顺序排序)。

enum Suit
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;
}

Suit::cases();

//将会产生
[Suit::Hearts, Suit::Diamonds, Suit::Clubs, Suit::Spades]

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/28897.html

(0)
上一篇 2023年7月6日
下一篇 2023年7月8日

相关推荐

  • 2.2PHP标量类型之字符串(String)

    1.单引号字符串 单引号字符串只支持转义反斜线(\)和单引号(‘),不支持其余转义。 单引号字符串不支持变量解析。 单引号字符串支持跨多行编写一行代码。 2.双引号字符串 双引号字符串不仅支持转义反斜线(\)和双引号(“),还支持其余转义。 双引号字符串支持变量解析。 双引号字符串支持跨多行编写一行代码。 转义序列 描…

    PHP语言教程 2023年7月2日
    0350
  • 1.3PHP语言的标识符(Identifier)

    1.标识符 标识符必须以字母(A~Z 和 a~z)或 下划线(_) 开头,后续可以是任何字母(A~Z 和 a~z)、数字(0~9)或 下划线(_)。除了函数名外,标识符都区分大小写。 2.命名约定

    PHP语言教程 2023年6月3日
    0160
  • 1.6PHP语言的变量(Variable)

    1.变量声明 2.变量分类 2.1全局变量 名称 修饰符 全局变量 —————— 2.2成员变量 名称 修饰符 静态属性(类) static 实例属性(类) 至少有一个修饰符 2.3局部变量 名称 修饰符 静态变量(函数内) static 局部变量 —————— 值形参 —————— 默认值形参 —————— 引用形参…

    PHP语言教程 2023年6月6日
    0520

发表回复

登录后才能评论