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
Cũ vẫn chất
-
Cách khóa tài khoản Facebook tạm thời trên điện thoại, máy tính
Hôm qua 2 -
Cách mở camera trên laptop Windows 7/8/10/11
Hôm qua 3 -
Sửa lỗi micro không hoạt động trong Windows 10
Hôm qua 1 -
Ốp iPhone 14 có vừa với iPhone 15 không?
Hôm qua -
Chuyển động cơ học là gì?
Hôm qua -
BFF
-
Lấy ID fb, check ID Facebook, lấy UID, cách tìm ID Facebook nhanh nhất
Hôm qua -
Code Thái Hư Tam Quốc mới nhất
Hôm qua -
Cách tạo mục lục trong Word tự động cho Word 2007, 2010, 2016 và 2019
Hôm qua 12 -
Danh sách iPhone, iPad không được lên iOS 16
Hôm qua