0

PHP và MySQL Bài 6: Cấu trúc điều khiển rẽ nhánh - if, else, elseif và switch...case

Trong lập trình thực tế, mã nguồn hiếm khi chạy tuột một mạch từ trên xuống dưới. Tùy thuộc vào dữ liệu đầu vào, chương trình sẽ rẽ sang các nhánh khác nhau. PHP cung cấp các công cụ kiểm soát luồng cực kỳ mạnh mẽ để làm việc này.


1. Cấu trúc if cơ bản (Nếu... thì...)

Đây là câu lệnh rẽ nhánh đơn giản nhất. Nó chỉ thực thi đoạn code bên trong khối lệnh {} nếu điều kiện truyền vào mang giá trị true. Nếu false, nó sẽ bỏ qua và chạy tiếp các dòng code phía dưới.

Cú pháp:

if (điều_kiện) {
    // Code chạy nếu điều_kiện đúng
}

💡 Ví dụ thực tế: Kiểm tra xem máy chủ trạm (Station Server) có đang hoạt động hay không trước khi đồng bộ dữ liệu.

<?php
    $stationServerStatus = "online";

    if ($stationServerStatus === "online") {
        echo "Bắt đầu đồng bộ dữ liệu giao dịch về Central Server.\n";
    }
    
    echo "Tiếp tục các tiến trình khác...";
?>

2. Cấu trúc if...else (Nếu... thì... ngược lại thì...)

Khi bạn có hai kịch bản đối lập nhau: một dành cho trường hợp đúng và một dành cho trường hợp sai.

Cú pháp:

if (điều_kiện) {
    // Code chạy nếu đúng
} else {
    // Code chạy nếu sai
}

💡 Ví dụ thực tế: Xử lý logic quẹt thẻ tại cổng kiểm soát AFC (Automatic Fare Collection).

<?php
    $soDuThucTe = 10000;
    $giaVeTuyen = 15000;

    if ($soDuThucTe >= $giaVeTuyen) {
        $soDuThucTe -= $giaVeTuyen; // Trừ tiền
        echo "Giao dịch thành công. Mở cổng Turnstile!";
    } else {
        echo "Lỗi: Số dư không đủ. Vui lòng nạp thêm tiền tại TVM.";
    }
?>

3. Cấu trúc if...elseif...else (Kiểm tra nhiều điều kiện liên tiếp)

Dùng khi bạn có nhiều hơn 2 nhánh rẽ. Hệ thống sẽ kiểm tra lần lượt từ trên xuống dưới, nhánh nào đúng thì chạy nhánh đó và thoát ra ngay lập tức. Nếu không có nhánh nào đúng, khối else cuối cùng sẽ chạy.

💡 Ví dụ thực tế: Phân loại hành khách để áp dụng chính sách giá vé khác nhau.

<?php
    $loaiThe = "student"; // Các loại: adult, student, senior, free_pass

    if ($loaiThe === "free_pass") {
        echo "Vé miễn phí. Vui lòng qua cổng.";
    } elseif ($loaiThe === "student") {
        echo "Áp dụng giá vé học sinh/sinh viên (Giảm 50%).";
    } elseif ($loaiThe === "senior") {
        echo "Áp dụng giá vé người cao tuổi (Giảm 30%).";
    } else {
        echo "Áp dụng giá vé người lớn (Nguyên giá).";
    }
?>

4. Cấu trúc switch...case (Chuyển mạch)

Khi bạn phải dùng quá nhiều elseif để kiểm tra chỉ một biến duy nhất với các giá trị cụ thể, đoạn code sẽ trở nên rối mắt. Đây là lúc switch...case tỏa sáng.

⚠️ Quy tắc ngầm quan trọng: Bắt buộc phải có từ khóa break; ở cuối mỗi case. Nếu quên break, code sẽ chạy tuột xuống các case bên dưới (hiện tượng fall-through) gây ra lỗi logic nghiêm trọng.

💡 Ví dụ thực tế: Xử lý các mã lỗi (Error Codes) trả về từ Ticket Vending Machine (TVM).

<?php
    $maLoiTvm = "ERR_CASH_BOX_FULL";

    switch ($maLoiTvm) {
        case "ERR_PAPER_OUT":
            echo "Cảnh báo: Máy hết giấy in biên lai. Cần bổ sung ngay.";
            break;
            
        case "ERR_CASH_BOX_FULL":
            echo "Cảnh báo: Hộp tiền mặt đã đầy. Yêu cầu nhân viên thu gom.";
            break;
            
        case "ERR_NETWORK_DOWN":
            echo "Nghiêm trọng: Máy mất kết nối mạng cục bộ.";
            break;
            
        default:
            // Tương đương với block 'else'
            echo "Máy hoạt động bình thường hoặc mã lỗi không xác định.";
            break;
    }
?>

5. Cú pháp viết tắt: Toán tử ba ngôi (Ternary Operator)

Trong thực tế đi làm, các Developer rất thích dùng cú pháp viết tắt cho các khối if...else ngắn, chỉ gồm một dòng gán giá trị. Nó giúp file code gọn gàng và trông chuyên nghiệp hơn rất nhiều.

Cú pháp:

$bien = (điều_kiện) ? gia_tri_neu_dung : gia_tri_neu_sai;

Thay vì viết dài dòng:

$soDu = 50000;
if ($soDu > 0) {
    $trangThai = "Active";
} else {
    $trangThai = "Blocked";
}

Bạn chỉ cần gõ một dòng duy nhất:

$soDu = 50000;
$trangThai = ($soDu > 0) ? "Active" : "Blocked";
echo "Trạng thái thẻ hiện tại là: " . $trangThai;

Tổng kết Bài 6

Đến đây, bạn đã nắm trong tay khả năng kiểm soát luồng dữ liệu của hệ thống, điều hướng ứng dụng rẽ trái, rẽ phải tùy theo ý định của mình.

Nhưng nếu chúng ta có một danh sách 10,000 giao dịch cần kiểm tra trạng thái thì sao? Chẳng lẽ copy/paste lệnh if 10,000 lần? Chắc chắn là không rồi. Ở Bài 7: Vòng lặp trong PHP, chúng ta sẽ học cách bắt máy tính làm việc lặp đi lặp lại những tác vụ nhàm chán nhất với tốc độ ánh sáng!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí