Cách dùng Enum trong PHP 8
Enum là một trong số tính năng cơ bản của nhiều ngôn ngữ lập trình và PHP cũng không ngoại lệ. Dưới đây là mọi điều bạn cần biết về Enum trong PHP.
Enumeration (enum) là một kiểu dữ liệu mà bạn có thể dùng để lưu một giá trị từ một bộ tùy chỉnh. Chúng là lựa chọn hoàn hảo để đại diện cho kiểu tùy chọn mà bạn có thể hiện trong một danh sách thả xuống.
PHP 8.1 hiện đã hỗ trợ enum. Sử dụng enum rất dễ nhưng chúng cung cấp thêm các tính năng được mượn từ lập trình hướng đối tượng.
Tác dụng của Enum
Enum hữu ích khi bạn muốn làm việc với một tập hợp cố định các giá trị liên quan. Ví dụ, bạn có thể dùng một enum để đại diện cho các bộ trong một gói thẻ hoặc kiểu phương tiện.
Enum của PHP khá phức tạp, với một số tính năng được vay mượn từ các lớp (class). Bạn có thể dùng chúng trong kết hợp với gợi ý kiểu để viết code dễ đoán và chặt chẽ hơn.
Enum cơ bản
Enum thường lưu trữ các giá trị vô hướng. Chúng tương tự như các kiểu dữ liệu nguyên thủy của C, dù enum của PHP có thể chứa những giá trị chuỗi cũng như số nguyên. Tuy nhiên, mặc định, những giá trị enum của PHP không có giá trị vô hướng tương đương. Chúng được gọi là enum cơ bản:
enum Season
{
case Spring;
case Summer;
case Autumn;
case Winter;
}
Lưu ý cách PHP dùng lại từ khóa case mà bạn sẽ gặp phải trong lệnh switch. Những giá trị enum đại diện chỉ là tên của các trường hợp. Bạn có thể tham chiếu tới một giá trị enum cụ thể bằng lệnh sau:
EnumTypeName::EnumField
Ví dụ, để tham chiếu tới mùa đông, dùng:
Season::Winter
Bạn có thể gắn giá trị này cho một biến và kiểm tra nó dựa trên những giá trị Season khác:
$favorite = Season::Summer;
if ($favorite == get_current_season()) {
echo "It's my favorite season!";
}
Dùng gợi ý kiểu, bạn có thể giới hạn các tham số hay kiểu trả về tới một enum cụ thể. Điều này giúp tránh một loạt lỗi và việc chỉnh sửa code cũng dễ dàng hơn:
function get_current_season(): Season
{
$day = date("z");
if ($day < 59 || $day > 333) return Season::Winter;
if ($day < 151) return Season::Spring;
if ($day < 243) return Season::Summer;
if ($day < 334) return Season::Autumn;
}
Nếu hàm get_current_season cố gắng trả về một giá trị khác, không phải Season, PHP sẽ phát sinh lỗi TypeError nghiêm trọng.
Enum được hỗ trợ
PHP dùng thuật ngữ “backed enum” để tham chiếu tới một enum cùng với các giá trị. Chúng có thể là số nguyên hoặc chuỗi:
enum Month: int
{
case Jan = 1;
case Feb = 2;
//...
}
Bạn cần khai báo kiểu enum được hỗ trợ và nó phải là int hoặc string. Bạn có thể truy cập giá trị cơ bản bằng cách dùng thuộc tính value chỉ đọc:
echo Month::Jan->value;
Khi dùng enum được hỗ trợ, bạn cũng có thể chuyển đổi chúng, từ giá trị vô hướng tương đương, bằng phương thức from:
var_dump(Month::from(2));
Các phương thức enum
PHP enum cũng có các phương thức, khiến chúng hơi giống một lớp rút gọn. Điều này cho thấy vị trí của PHP, nằm giữa ngôn ngữ theo thủ tục và hướng đối tượng.
Ví dụ, bạn có thể thêm phương thức đơn giản này vào enum Month để lấy số ngày từ một giá trị cụ thể:
/* Note: no leap-year handling! */
function daysInMonth(): int {
if ($this == Month::Feb) return 28;
if (in_array($this, array(Month::Apr, Month::Jun, Month::Sep, Month::Nov))) return 30;
return 31;
}
Lưu ý, bạn có thể dùng $this để tham chiếu tới một giá trị enum cụ thể, giống như bạn dùng $this để tham chiếu tới một đối tượng nhất định. Bạn cũng có thể dùng toán tử ngang bằng chuẩn, ==, để so sánh các giá trị enum.
Enum cũng hỗ trợ các phương thức tĩnh. Ví dụ:
static function random(): Month {
return Month::from(rand(1, count(Month::cases())));
}
Trên đây là những điều bạn cần biết về enum trong PHP. HI vọng bài viết hữu ích với các bạn.
Bạn nên đọc
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:


Cũ vẫn chất
-
Valentine đen là gì? Valentine đen là ngày nào?
Hôm qua -
Hàm COUNTIFS, cách dùng hàm đếm ô theo nhiều điều kiện trong Excel
Hôm qua -
Cách dùng Terabox lưu trữ với 1TB miễn phí
Hôm qua 5 -
4 cách kiểm tra lịch sử giao dịch BIDV trên điện thoại, máy tính
Hôm qua -
Cách sao chép hoặc tạo bản sao toàn bộ trang tính trong Google Sheets
Hôm qua -
Các cách làm, tùy chỉnh trong bài sẽ giúp tăng tốc Windows 10 của bạn "nhanh như gió"
Hôm qua 6 -
Dynamic System Updates là gì?
Hôm qua -
Sạc không dây là gì? Nó nhanh hơn hay chậm hơn sạc dây? Danh sách smartphone Android hỗ trợ sạc không dây
Hôm qua -
Cách sửa lỗi không thấy bộ điều hợp mạng trên Windows 10
Hôm qua -
Cách chặn từ khóa và Hashtag trên Twitter
Hôm qua