枚举(Enumeration)是一种数据类型,它允许一组预定义的常量值。在 PHP 中,枚举是通过类来实现的,这些类继承自 Enum
基类。枚举提供了一种类型安全的方式来表示一组固定的值。
PHP 枚举有两种类型:
Pending
、Shipped
、Delivered
等。Admin
、User
、Guest
等。Info
、Warning
、Error
等。<?php
enum Status: string {
case Pending = 'pending';
case Shipped = 'shipped';
case Delivered = 'delivered';
}
enum Role: string {
case Admin = 'admin';
case User = 'user';
case Guest = 'guest';
}
function processOrder(Status $status) {
switch ($status) {
case Status::Pending:
echo "Order is pending.\n";
break;
case Status::Shipped:
echo "Order is shipped.\n";
break;
case Status::Delivered:
echo "Order is delivered.\n";
break;
}
}
processOrder(Status::Pending);
processOrder(Status::Shained); // 这里会报错,因为 Shained 不是有效的枚举值
?>
原因:当传入的值不是枚举中定义的值时,会导致错误。
解决方法:可以使用类型检查和异常处理来确保传入的值是有效的枚举值。
<?php
function processOrder(Status $status) {
if (!in_array($status, Status::cases(), true)) {
throw new InvalidArgumentException("Invalid status: $status");
}
switch ($status) {
case Status::Pending:
echo "Order is pending.\n";
break;
case Status::Shipped:
echo "Order is shipped.\n";
break;
case Status::Delivered:
echo "Order is delivered.\n";
break;
}
}
try {
processOrder(Status::Pending);
processOrder(Status::Shained); // 这里会抛出异常
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}
?>
通过以上内容,你应该对 PHP 枚举有了全面的了解,包括其基础概念、优势、类型、应用场景以及如何处理常见问题。
领取专属 10元无门槛券
手把手带您无忧上云