2.8PHP类型之枚举(Enum)

枚举(enum)本质是一个类(Class), 它的各种条目(case)是这个类的单例对象,既然条目是对象,那就意味着条目可以被用在对象可以被使用在的地方。

  • 枚举不支持静态变量,实例变量
  • 枚举支持常量
  • 枚举支持静态方法,单例对象的实例方法,不支持构造函数和析构函数
  • 枚举不支持继承
  • 枚举的条目是自己的单例对象,所以不支持直接new实例化枚举
  • 枚举支持实现接口
  • 枚举支持导入trait

1.纯粹(Pure)枚举

如果条目仅仅为当前枚举的单例对象,条目没有关联数据,就称为“纯粹条目”(Pure Case)。仅包含纯粹条目的枚举,就称为“纯粹枚举“(Pure Enum)。

虽然纯粹条目没有关联数据,但也不存在隐式的标量类型, 就是说 Suit::Hearts 不等于 "0"

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

2.回退(Backed)枚举

如果条目不但为当前枚举的单例对象,条目又被回退(Backed)到一个更简单的标量值,就称为“回退条目”(Backed Case)。仅包含回退条目的枚举,就称为“回退枚举”(Backed Enum)。

回退枚举仅能回退到 int 或 string 类型,且同时仅支持使用一种类型(就是说,不能联合 int|string)。

回退条目的名称和值都必须唯一。

回退条目必须显式定义值,无法自动生成标量值(比如:连续的数字)。

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

3.访问条目(Case)

//访问条目
$val = Suit::Diamonds

//$val类型为Suit
//访问条目的名称
Suit::Spades->name;

//输出
Spades
//访问条目的值
Suit::Clubs->value;

//输出
C
//访问枚举条目的清单
Suit::cases();

//产生一个数组
[Suit::Hearts, Suit::Diamonds, Suit::Clubs, Suit::Spades]

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

(0)
上一篇 2021年2月7日 20:00
下一篇 2021年2月8日 20:39

相关推荐

  • 1.3PHP语言的标识符(Identifier)

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

    PHP语言教程 2021年1月3日
    05690
  • 1.6PHP语言的变量(Variable)

    1.变量声明 变量在类中被称为属性(property)。 2.变量分类 2.1全局变量 名称 修饰符 全局变量 —————— 2.1成员变量 名称 修饰符 静态属性(类体内) 用static修饰 实例属性 —————— 2.2局部变量 名称 修饰符 静态变量(函数体内) 用static修饰 局部变量 —————— 参数…

    PHP语言教程 2021年1月6日
    05550
  • 2.3PHP类型之数组(Array)

    1.索引数组 2.关联数组 3.混合数组 混合数组的键可以同时含有整数和字符串类型,因为PHP语言实际上并不区分索引数组和关联数组。 键为可选项。如果未指定,PHP将自动使用之前用过的所有整数键中的最大加上1作为新的键。 4.多维数组 多维数组指的是数组的值可以是一个或多个数组的数组。 5.访问数组 6.数组解构(de…

    PHP语言教程 2021年2月3日
    06700

发表回复

登录后才能评论