枚举(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