Cấu trúc điều kiện là một phần quan trọng trong lập trình, giúp các chương trình đưa ra các quyết định khác nhau dựa trên các điều kiện. Trong PHP, ngoài việc sử dụng câu lệnh if...else, bạn còn có thể sử dụng câu lệnh switch. Câu lệnh switch giúp chương trình dễ dàng xử lý nhiều trường hợp mà không cần viết quá nhiều câu lệnh if...else lồng nhau, đồng thời giúp mã nguồn trở nên gọn gàng và dễ đọc hơn.
Trong bài viết này thuộc series "Học ngôn ngữ lập trình PHP" của codetuthub.com, chúng ta sẽ cùng tìm hiểu về PHP switch statement, cách sử dụng nó trong các phiên bản PHP 7.x và PHP 8.x, cùng các ví dụ minh họa cụ thể.
1. Câu lệnh switch trong PHP là gì?
Câu lệnh switch trong PHP được sử dụng để kiểm tra một biểu thức và so sánh giá trị của nó với các giá trị khác nhau (case). Khi giá trị của biểu thức khớp với một case, khối mã tương ứng sẽ được thực thi. Nếu không có giá trị nào khớp, khối mã trong default sẽ được thực hiện (nếu có).
Cú pháp của switch:
switch (expression) {
case value1:
// Thực thi nếu expression == value1
break;
case value2:
// Thực thi nếu expression == value2
break;
// ...
default:
// Thực thi nếu không khớp với bất kỳ case nào
}Giải thích:
switch (expression): Biểu thức cần so sánh.case value: Mỗi giá trị (case) được so sánh với biểu thức. Nếu giá trị củaexpressionbằngvalue, đoạn mã trong case đó sẽ được thực thi.break: Kết thúc việc kiểm tra các case và thoát ra khỏi câu lệnh switch. Nếu không cóbreak, các case sau sẽ tiếp tục được thực thi, ngay cả khi đã có case khớp.default: Tùy chọn, nếu không có case nào khớp, đoạn mã trongdefaultsẽ được thực thi.
2. Ví dụ về switch trong PHP 7.x
Trong PHP 7.x, câu lệnh switch hoạt động rất đơn giản và rõ ràng. Dưới đây là một ví dụ:
Ví dụ 1: Switch kiểm tra ngày trong tuần
$day = 3;
switch ($day) {
case 1:
echo "Hôm nay là Thứ Hai";
break;
case 2:
echo "Hôm nay là Thứ Ba";
break;
case 3:
echo "Hôm nay là Thứ Tư";
break;
case 4:
echo "Hôm nay là Thứ Năm";
break;
case 5:
echo "Hôm nay là Thứ Sáu";
break;
default:
echo "Đây là ngày cuối tuần!";
break;
}Giải thích:
- Trong ví dụ trên, biến
$daycó giá trị là3, tương ứng với case thứ 3. Vì vậy, câu lệnhecho "Hôm nay là Thứ Tư";sẽ được thực thi. - Nếu không có giá trị nào khớp với các case, câu lệnh trong
defaultsẽ được chạy.
Ví dụ 2: Switch với nhiều giá trị trong một case
$fruit = "apple";
switch ($fruit) {
case "apple":
case "pear":
echo "Đây là một loại quả tròn.";
break;
case "banana":
echo "Đây là một quả chuối.";
break;
default:
echo "Loại quả này không được biết đến.";
}Giải thích:
- Trong ví dụ này, cả "apple" và "pear" đều dẫn đến cùng một hành động:
echo "Đây là một loại quả tròn.";.
3. Sự thay đổi của switch trong PHP 8.x
PHP 8 mang lại một tính năng mới, đặc biệt hữu ích cho việc làm việc với các điều kiện phức tạp: match expression. Mặc dù switch vẫn được sử dụng như cũ trong PHP 8.x, nhưng match cung cấp một cách tiếp cận gọn gàng và mạnh mẽ hơn.
Match Expression trong PHP 8.x
Match tương tự như switch, nhưng có một số ưu điểm:
- Không cần break: Không cần phải sử dụng
breakđể ngăn việc tiếp tục kiểm tra các case. - Trả về giá trị:
matchtrả về giá trị thay vì thực thi câu lệnh. - So sánh nghiêm ngặt:
matchsử dụng so sánh nghiêm ngặt (===) thay vì so sánh không nghiêm ngặt (==) như trongswitch.
Cú pháp của match:
$result = match (expression) {
value1 => action1,
value2 => action2,
default => action_default,
};Ví dụ 3: Sử dụng match trong PHP 8.x
$day = 3;
$result = match ($day) {
1 => "Hôm nay là Thứ Hai",
2 => "Hôm nay là Thứ Ba",
3 => "Hôm nay là Thứ Tư",
4 => "Hôm nay là Thứ Năm",
5 => "Hôm nay là Thứ Sáu",
default => "Đây là ngày cuối tuần!",
};
echo $result;Giải thích:
matchtrả về giá trị trực tiếp, không cần sử dụngbreaknhưswitch.matchsử dụng so sánh nghiêm ngặt (===), vì vậy các giá trị được so sánh không chỉ về mặt giá trị mà còn về kiểu dữ liệu.- Nếu
$daykhông khớp với bất kỳ case nào, nó sẽ trả về giá trịdefault.
Ví dụ 4: Match với nhiều giá trị trong một case
$fruit = "apple";
$result = match ($fruit) {
"apple", "pear" => "Đây là một loại quả tròn.",
"banana" => "Đây là một quả chuối.",
default => "Loại quả này không được biết đến.",
};
echo $result;Giải thích:
- Trong PHP 8, bạn có thể gom nhiều giá trị (như
"apple","pear") vào cùng một dòng để chỉ định cùng một hành động.
4. So sánh giữa switch và match
Switch:
- Cần break: Nếu quên thêm
break, các case sau sẽ được thực thi. - So sánh không nghiêm ngặt:
switchsử dụng so sánh không nghiêm ngặt (==), nghĩa là nó không quan tâm đến kiểu dữ liệu. - Đọc kém gọn gàng hơn: Trong các tình huống phức tạp,
switchcó thể tạo ra mã dài và khó đọc hơn.
Match:
- Không cần break: Match tự động dừng sau khi tìm thấy case khớp.
- So sánh nghiêm ngặt: Match sử dụng so sánh nghiêm ngặt (
===), nên đòi hỏi giá trị và kiểu dữ liệu phải chính xác. - Gọn gàng và ngắn gọn hơn: Match trả về giá trị ngay lập tức, giúp mã trở nên ngắn gọn và dễ quản lý hơn.
5. Khi nào nên sử dụng switch và match?
- Sử dụng switch nếu bạn đang làm việc với PHP 7.x hoặc nếu bạn cần một cách đơn giản để xử lý nhiều điều kiện trong mã nguồn của mình.
- Sử dụng match nếu bạn đang làm việc với PHP 8.x và muốn một cú pháp gọn gàng, so sánh nghiêm ngặt, và không cần phải sử dụng
break.
Kết luận
Câu lệnh switch trong PHP là một công cụ mạnh mẽ giúp bạn kiểm tra nhiều điều kiện mà không cần phải sử dụng nhiều câu lệnh if...else lồng nhau. Với sự ra đời của match expression trong PHP 8.x, bạn có thêm một lựa chọn tối ưu hơn cho các biểu thức điều kiện phức tạp.
Việc hiểu rõ cách sử dụng switch và match sẽ giúp bạn viết mã gọn gàng, hiệu quả hơn, đặc biệt khi làm việc với các tình huống đòi hỏi nhiều quyết định. Hãy tiếp tục theo dõi codetuthub.com để cập nhật thêm nhiều bài viết hữu ích khác về lập trình PHP trong series "Học ngôn ngữ lập trình PHP". Chúc bạn học tốt và thành công!









