PHP 8.1 đã đánh dấu một bước tiến quan trọng với sự ra đời của kiểu dữ liệu Enum. Trong bài viết này, chúng ta sẽ khám phá khái niệm Enum trong PHP 8.1 và cách nó có thể làm cho mã nguồn của bạn trở nên dễ đọc hơn và an toàn hơn.

Bạn muốn trở thành một nhà lập trình PHP chuyên nghiệp? Hãy bắt đầu với cuốn Ebook hữu ích từ Stringee! 

>>> ĐĂNG KÝ NHẬN EBOOK PHP MIỄN PHÍ TẠI ĐÂY:  

1. Enum trong PHP 8.1 là gì?

Enum là viết tắt của “Enumeration”, một kiểu dữ liệu cho phép bạn xác định một tập hợp cố định các giá trị mà một biến có thể nhận. Trong PHP 8.1, bạn có thể tạo Enum bằng cách sử dụng từ khóa Enum. Ví dụ sau đây là cách bạn có thể định nghĩa một Enum cho các ngày trong tuần:

Enum Days {
    case MONDAY;
    case TUESDAY;
    case WEDNESDAY;
    case THURSDAY;
    case FRIDAY;
    case SATURDAY;
    case SUNDAY;
}

Xem thêm bài viết về PHP:

- Tìm hiểu về hàm preg_match_all trong PHP

- Xử lý hàm date (ngày tháng) trong PHP

- Giới hạn ký tự hiển thị và chức năng read more trong PHP

2. Ưu điểm của Enum trong PHP 8.1

  • An toàn kiểu dữ liệu (Type Safety): Enum trong PHP 8.1 đảm bảo bạn chỉ có thể gán một trong các giá trị đã được định nghĩa cho biến Enum. Điều này giúp tránh các lỗi kiểu dữ liệu và làm cho mã nguồn của bạn an toàn hơn.
  • Dễ đọc và hiểu hơn: Sử dụng Enum làm cho mã nguồn trở nên dễ đọc hơn vì nó cung cấp tên giá trị rõ ràng và không gian tên để phân loại các giá trị.
  • Tự động chuyển đổi chuỗi (String conversion): Enum trong PHP 8.1 cung cấp các phương thức magic methods tự động như __toString() để chuyển đổi Enum thành chuỗi, giúp bạn dễ dàng hiển thị giá trị của Enum.
  • Sử dụng trong hàm và phương thức: Bạn có thể sử dụng Enum như là một tham số của hàm hoặc phương thức, giúp kiểm tra kiểu dữ liệu một cách chính xác và dễ dàng.

3. Các phương thức sử dụng Enum trong PHP 8.1

Trong PHP 8, Enum có một số phương thức có sẵn mà bạn có thể sử dụng để làm việc với giá trị Enum. Dưới đây là danh sách các phương thức của Enum:

3.1. Enum::values():

Phương thức này trả về một mảng chứa tất cả các giá trị của Enum:

Enum Day {
    case MONDAY;
    case TUESDAY;
    case WEDNESDAY;
}

$values = Day::values();
print_r($values); // Array([0] => Day::MONDAY, [1] => Day::TUESDAY, [2] => Day::WEDNESDAY)

3.2. Enum::valueExists($value)

Phương thức này kiểm tra xem một giá trị cụ thể có tồn tại trong Enum hay không và trả về true hoặc false:

Enum Day {
    case MONDAY;
    case TUESDAY;
    case WEDNESDAY;
}

$exists = Day::valueExists(Day::TUESDAY);
if ($exists) {
    echo "TUESDAY exists in the Day Enum.";
}

3.3. Enum::from($value)

Phương thức này trả về giá trị Enum dựa trên giá trị đầu vào:

Enum Day {
    case MONDAY;
    case TUESDAY;
    case WEDNESDAY;
}

$day = Day::from('TUESDAY');
echo $day; // Day::TUESDAY

3.4. Enum::fromValue($value)

Phương thức này tương tự Enum::from(), nhưng nó sử dụng giá trị thay vì tên:

Enum Day {
    case MONDAY;
    case TUESDAY;
    case WEDNESDAY;
}

$day = Day::fromValue('TUESDAY');
echo $day; // Day::TUESDAY

3.5. Enum::__toString()

 Phương thức này trả về tên của giá trị Enum dưới dạng chuỗi:

Enum Day {
    case MONDAY;
    case TUESDAY;
    case WEDNESDAY;
}

$day = Day::TUESDAY;
echo $day; // "TUESDAY"

4. Ví dụ sử dụng Enum trong PHP 8.1

Dưới đây là ví dụ về cách bạn có thể sử dụng kiểu dữ liệu Enum trong PHP 8.1 để đại diện cho một số trạng thái của một Công ty Cổ phần có tên là "Stringee company". Trong ví dụ này, chúng ta sẽ tạo một Enum để biểu thị các trạng thái Công ty Cổ phần Stringee và sử dụng nó để kiểm tra trạng thái hiện tại của công ty:

<?php
Enum StringeeCompanyStatus {
    case ACTIVE;
    case SUSPENDED;
    case BANKRUPT;
    case ACQUIRED;
}

function checkCompanyStatus(StringeeCompanyStatus $status) {
    switch ($status) {
        case StringeeCompanyStatus::ACTIVE:
            echo "Stringee Company is currently active and thriving.\n";
            
            break;
        case StringeeCompanyStatus::SUSPENDED:
            echo "Stringee Company is temporarily suspended but not bankrupt.\n";
            break;
        case StringeeCompanyStatus::BANKRUPT:
            echo "Stringee Company has declared bankruptcy.\n";
            break;
        case StringeeCompanyStatus::ACQUIRED:
            echo "Stringee Company has been acquired by another company.";
            break;
    }
}

$companyStatus = StringeeCompanyStatus::ACTIVE;
checkCompanyStatus($companyStatus); // Output: Stringee Company is currently active and thriving.

$companyStatus = StringeeCompanyStatus::SUSPENDED;
checkCompanyStatus($companyStatus); // Output: Stringee Company is temporarily suspended but not bankrupt.

$companyStatus = StringeeCompanyStatus::BANKRUPT;
checkCompanyStatus($companyStatus); // Output: Stringee Company has declared bankruptcy.

$companyStatus = StringeeCompanyStatus::ACQUIRED;
checkCompanyStatus($companyStatus); // Output: Stringee Company has been acquired by another company.

Đầu ra:

Stringee Company is currently active and thriving.
Stringee Company is temporarily suspended but not bankrupt.
Stringee Company has declared bankruptcy.
Stringee Company has been acquired by another company.

Trong ví dụ này:

Chúng ta đã tạo một Enum có tên StringeeCompanyStatus với các giá trị ACTIVE, SUSPENDED, BANKRUPTCY, và ACQUIRED. Nó định nghĩa bốn trạng thái khác nhau của Công ty Cổ phần Stringee.

Chúng ta đã viết một hàm checkCompanyStatus nhận một tham số kiểu StringeeCompanyStatus. Hàm này kiểm tra giá trị của StringeeCompanyStatus và in ra thông báo tương ứng với trạng thái hiện tại của công ty.

Chúng ta đã tạo một biến $companyStatus và gán cho nó giá trị StringeeCompanyStatus::ACTIVE, sau đó gọi hàm checkCompanyStatus để kiểm tra trạng thái hiện tại của công ty. Kết quả được in ra dựa trên giá trị của biến $companyStatus.

Kết luận

Vậy là chúng ta đã cùng tìm hiểu về Enum trong PHP 8.1, từ những khái niệm cơ bản tới cách hoạt động. Hi vọng bài viết sẽ đem đến cho bạn những thông tin hữu ích. Hãy theo dõi Stringee để cập nhật những thông tin công nghệ mới nhất mỗi ngày.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: