Trong PHP, từ phiên bản PHP 8.1 trở đi, Enumerations (enum) đã được giới thiệu để đại diện cho tập hợp các hằng số có tên (named constants), tương tự như enum trong các ngôn ngữ như Java, C#.
Dưới đây là giải thích chi tiết cách sử dụng enum trong PHP, bao gồm cả enum thuần (pure enum) và enum có giá trị (backed enum).
enum Status {
case Pending;
case Approved;
case Rejected;
}
Cách sử dụng:
$status = Status::Pending;
if ($status === Status::Approved) {
echo "Đã được duyệt.";
}
case
là một instance duy nhất.enum Role: string {
case Admin = 'admin';
case Editor = 'editor';
case Viewer = 'viewer';
}
Cách sử dụng:
$role = Role::Admin;
echo $role->value; // Kết quả: admin
// Hoặc lấy từ value
$roleFromValue = Role::from('editor');
echo $roleFromValue->name; // Editor
Enum có thể có method, thuộc tính, và cả constructor.
enum PaymentStatus: string {
case Paid = 'paid';
case Unpaid = 'unpaid';
case Refunded = 'refunded';
public function label(): string {
return match($this) {
self::Paid => 'Đã thanh toán',
self::Unpaid => 'Chưa thanh toán',
self::Refunded => 'Đã hoàn tiền',
};
}
}
Sử dụng:
$status = PaymentStatus::Paid;
echo $status->label(); // Đã thanh toán
$status = Status::Approved;
match ($status) {
Status::Pending => 'Đang chờ',
Status::Approved => 'Đã duyệt',
Status::Rejected => 'Từ chối',
};
OrderStatus
)UserRole
)PostType
)ConnectionType
)Role::cases(); // Trả về mảng tất cả các case
foreach (Role::cases() as $role) {
echo $role->name . ' => ' . $role->value . PHP_EOL;
}
backed enum
.Backed enum
chỉ hỗ trợ kiểu string
hoặc int
.Nếu bạn đang dùng PHP < 8.1, bạn sẽ phải dùng class hằng số giả enum như:
class Status {
const Pending = 'pending';
const Approved = 'approved';
const Rejected = 'rejected';
}
Nhưng đây chỉ là mô phỏng và không có tính năng như enum thật.