在本文中,我们将看到php v8.1中的枚举的功能,这些功能是纯粹的情况,并在枚举中得到支持以及常规类和枚举之间的差异。
基本语法
php 8.1使用关键字枚举来声明枚举。语法类似于性状,类和界面的语法。看看一个简单的枚举:
enum Senioridade {
case Junior;
case Pleno;
case Senior;
case Especialista;
}
关键字case
用于描述枚举接受的特定值。结束的情况与班级常数相同:
$nivel = Senioridade::Especialista;
枚举的优点是它们解决了恒定值的集合。枚举主要与类和界面相同的方式起作用。因此,可以制作键入函数仅接受枚举中定义的一个值的键入:
class Programador {
public function __construct(
public string $nome,
public Senioridade $nivel
){}
}
在此示例中,您可以通过Koud2类中的Enum Koud1通过:
$programador = new Programador("Marcello", Senioridade::Especialista);
支持的枚举(定义值)
eNumnum的值由对象内部表示,但是如果需要,您可以为它们分配一个值;例如,这是在数据库中提供的。
enum Senioridade: int {
case Junior = 1;
case Pleno = 2;
case Senior = 3;
case Especialista = 4;
}
在这里,eNum Senioridade
已修改以创建一个支持的int
-type枚举。
这是一些支持枚举的规则:
- 他必须在枚举声明中声明标量类型。而且只允许Koud5或Koud4。
- 它必须为所有情况分配一个值。
- 归因于每种情况的值应为相同的标量类型。
- 不应包含重复的案例或值。
要获得归因的值,请使用->value
属性:
$programador->nivel->value
但是,如果您需要获取名称,请使用->name
属性:
$programador->nivel->name
标量值
当我们想恢复枚举的标量值时,我们可以使用整个from()
。这个母亲收到字符串值或整体,并将其转换回枚举。
Senioridade::from(3) // Senior
如果传递一个不对应的值与允许的值,则会有致命的错误。
Senioridade::from(100); // PHP fatal error
以上将导致致命的PHP错误,因为资历中不存在“ 100”的值。
为了使这个更安全,PHP 8.1为我们提供了一个整个tryFrom()
,它将返回null而不是发出错误。
Senioridade::tryFrom(100) // NULL
母亲©全部枚举
枚举可能包含所有人。他们还支持母亲的可见性修饰符以及所有愚蠢的人。
例如,宣布母亲©所有label(): string
,它返回了列举案件的友好标签。
enum Senioridade: int {
case Junior = 1;
case Pleno = 2;
case Senior = 3;
case Especialista = 4;
public function label(): string {
return match ($this) {
self::Junior => "Dev Junior",
self::Pleno => "Dev Pleno",
self::Senior => "Dev Sênior",
self::Especialista => "Dev Especialista"
};
}
}
要获得标签的值,它是如此呼唤整体,以至于我们创建了label()
:
$programador = new Programador("Marcello", Senioridade::Especialista);
$programador->nivel->label() // Dev Especialista
清单值
您可以使用完整的Enum::cases()
获取枚举中所有昂贵案例的列表。这个母亲返回一个包含真实对象的矩阵:
Senioridade::cases()
最终考虑
这是枚举的总体,但是使用枚举时可以探索许多其他事情,可以在RFC上检查一下(请求评论)。
这是用于完整阅读的RFC链接:
https://wiki.php.net/rfc/enumerations