Rẽ nhánh cho phép chương trình phản ứng khác nhau theo dữ liệu. Bài này học if/elseif/else, switch, biểu thức match (PHP 8) và cú pháp thay thế để xen PHP vào HTML gọn gàng.
- Viết if, elseif, else đúng cấu trúc
- Dùng switch cho nhiều giá trị rời rạc
- Dùng match trả về giá trị, so sánh chặt
- Xen điều kiện vào HTML bằng cú pháp thay thế
Khái niệm và lý thuyết
if kiểm tra điều kiện theo thứ tự, nhánh đầu đúng sẽ chạy, các nhánh sau bị bỏ qua: hãy xếp điều kiện từ hẹp đến rộng (≥ 8.5 trước ≥ 7). switch so sánh lỏng (==) và cần break; match so sánh chặt (===), trả về giá trị, không cần break và báo lỗi nếu không khớp nhánh nào.
if / elseif / else
<?php
$diem = 7.8;
if ($diem >= 8.5) {
$xep_loai = "Giỏi";
} elseif ($diem >= 7) {
$xep_loai = "Khá";
} elseif ($diem >= 5) {
$xep_loai = "Trung bình";
} else {
$xep_loai = "Yếu";
}
echo "Điểm $diem: $xep_loai";
// Điều kiện lồng nhau
if ($diem >= 5) {
if ($diem == 10) echo " (tuyệt đối)";
}switch
<?php
$thu = date("N"); // 1 = Thứ Hai ... 7 = Chủ nhật
switch ($thu) {
case 6:
case 7:
echo "Cuối tuần";
break;
case 1:
echo "Đầu tuần";
break;
default:
echo "Ngày thường";
}Thiếu break, PHP chạy tiếp các case bên dưới (fall-through): đôi khi hữu ích (gộp case 6, 7) nhưng thường là lỗi.
match (PHP 8)
<?php
$xep_loai = match (true) {
$diem >= 8.5 => "Giỏi",
$diem >= 7 => "Khá",
$diem >= 5 => "Trung bình",
default => "Yếu",
};
$mau = match ($xep_loai) {
"Giỏi", "Khá" => "green",
"Trung bình" => "orange",
default => "red",
};
echo "<b style='color:$mau'>$xep_loai</b>";Xen vào HTML: cú pháp thay thế
<?php $dang_nhap = true; $ten = "An"; ?>
<?php if ($dang_nhap): ?>
<p>Xin chào, <?= htmlspecialchars($ten) ?>! <a href="/dang-xuat.php">Đăng xuất</a></p>
<?php else: ?>
<a href="/dang-nhap.php">Đăng nhập</a>
<?php endif; ?><?= ... ?> là viết tắt của <?php echo ... ?>. Dạng if: ... endif; dễ đọc hơn dấu ngoặc nhọn khi xen nhiều HTML.
Với 2–3 nhánh đơn giản dùng if; nhiều giá trị rời rạc dùng match; chỉ dùng switch khi cần fall-through.
if ($a = 5) là phép gán (luôn đúng), không phải so sánh. Một số lập trình viên viết if (5 == $a) để tránh nhầm.
- Nhận tháng từ URL (?thang=3), cho biết tháng có bao nhiêu ngày (xét năm nhuận).
- Viết máy tính đơn giản: ?a=5&b=3&pt=cong, dùng match chọn phép tính.
- Hiển thị menu khác nhau cho khách và người đã đăng nhập bằng cú pháp thay thế.
- Viết lại ví dụ switch ngày trong tuần bằng match.
- if/elseif/else: xếp điều kiện từ hẹp đến rộng.
- switch so sánh ==, cần break.
- match so sánh ===, trả về giá trị, gọn và an toàn.
- if: endif; và = ?> để xen vào HTML.