Sử dụng toán tử (Bài trước)
(Bài tiếp) Vòng lặp Php

Các loại câu lệnh dẽ nhánh

PHP cung cấp các cấu trúc lệnh rẽ nhánh: if - else, elseif, switch - case

Câu lệnh if ... else

Cấu trúc lệnh if - else

Cấu trúc lệnh được mô tả như sơ đồ sau:

cau truc lenh if - else

(Lệnh if không có else): Ở sơ đồ thứ nhất khi chạy code nó sẽ kiểm tra điều kiện, nếu điều kiện là đúng thì sẽ thực hiện khối CODE thỏa mãn, còn khi điều kiện không thỏa mãn thì sẽ bỏ qua khối lệnh này, trường hợp này thì lệnh if không cần có else

(Lệnh if có else): Sự làm việc như sơ đồ thứ hai. Có một khối lệnh chạy nếu điều kiện thỏa mãn, và khối lệnh khác dành cho trường hợp điều kiện không thỏa mãn. Lúc này lệnh if sẽ có else

Cú pháp lệnh if - else

if (condition)
    lệnh (statement) hoặc khối lệnh {...} thi hành nếu condition (điều kiện) là true;
else
    lệnh hoặc khối lệnh {...} thi hành nếu condition là false;

condition là biểu thức logic có giá trị là true hoặc false. Trong cú pháp trên nếu chỉ thi hành một khối lệnh khi điều kiện thỏa mãn thì bỏ đi từ phần else

Ví dụ: In ra mà hình nếu là số chẵn

$number = 1990;
if (($number % 2) == 0)
    echo '$number là số chẵn;

Ví dụ: Nếu là ngày Thứ 7 và chủ nhật thì in ra màn hình chữ 'Ngày Nghỉ', các ngày khác in ra 'Ngày làm việc'

$d = date("D");
if (($d == "Sun") || ($d == "Sat"))
{
    echo "Ngày nghỉ!";
} 
else
{
    echo "Ngày làm việc!";
}

date("D") trả về tên thứ hiện tại (Xem Ngày tháng trong PHP). Vì khối lệnh { } ở ví dụ trên, bên trong chỉ có một statement, nên có thể bỏ {}

$d = date("D");
if (($d == "Sun") || ($d == "Sat"))
    echo "Ngày nghỉ!";
else
    echo "Ngày làm việc!";

Câu lệnh ba thành phần

Khối lệnh ngắn gọn sau sau:

$var = ($dieu_kien) ? $bieu_thu_1 : $bieu_thuc_2;

Tương đương với

if ($dieu_kien)
    $var = $bieu_thu_1;
else
    $var = $bieu_thuc_2;

Ví dụ: In ra ngày nghỉ, ngày làm việc

(($d == "Sun") || ($d == "Sat")) ? printf("Ngày nghỉ!"): printf("Ngày làm việc!");

Ví dụ: Gán $name bằng giá trị trong biến $_POST['name'] nếu biến đó tồn tại, nếu biến đó không tồn tại gán bằng giá trị mặc định 'NONAME'

$name = isset($_POST['name']) ? $_POST['name'] : 'NONAME';

Cú pháp lệnh elseif

Lệnh elseif trong PHP, được dùng kết hợp với if - else cho trường hợp bạn muốn kiểm tra và thi hành nhiều điều kiện (hơn 2).

if (điều_kiện_1)
    Khối lệnh cho điều_kiện_1
elseif (điều_kiện_2)
    Khối lệnh cho điều_kiện_2
    ...
elseif (điều_kiện_n)
    Khối lệnh cho điều_kiện_n
    ...
else
    Khối lệnh khi tất cả các điều kiện trên đều sai

Ví dụ: kiểm tra hôm nay là thứ 7 thì in ra thứ 7 ngày nghỉ, nếu là chủ nhật in ra chủ nhật ngày nghỉ, còn lại in ra ngày làm việc

 $d = date("D");
          
 if ($d == "Sun") 
    echo "Chủ Nhật, Ngày nghỉ!";
 elseif ($d == "Sat")    
    echo "Thứ Bảy, Ngày nghỉ!";         
 else
    echo "Ngày làm việc!";

Cú pháp lệnh switch - case

Lệnh switch case rẽ nhiều nhành, nó có thể thay thế elseif. Lệnh switch case có nghĩa là bạn muốn thi hành 1 trong các khối lệnh đưa ra tùy theo giá trị của một biểu thức trong switch. Cú pháp như sau:

switch (biểu_thức){
    case giá_trị_1:
        các dòng code ...
    case giá_trị_2:
        các dòng code ...
    default:
        các dòng code ...
    case giá_trị_n:
        các dòng code ...
}

Câu lệnh switch trên tùy vào giá trị của biểu thức mà nó sẽ rẽ nhánh ở case tương ứng. Khi rẽ vào case nào, thì code sẽ thực thi từ điểm đó cho tới cuối lệnh switch hoặc khi gặp lệnh break;. Vậy nếu biểu_thức ở trên có giá trị giá_trị_2 thì các dòng code (2) được thi hành nếu không gặp break thì các dòng code của case tiếp theo cũng thi hành, cứ như vậy cho tới cuối - hoặc cho đến khi gặp break;

default: là điểm rẽ nhánh, khi mà biểu_thức không bằng một giá trị nào trong các case.

Ví dụ: User được chia ra thành các role (vài trò)

  • member : Được đọc bài viết thường
  • vip: như member, thêm được đọc bài đặt biệt
  • mod: như vip, thêm quyền viết bài
  • admin: như mode, thêm quyền quản lý member
  • Không set các vai trò trên bị cấm truy cập

Tùy thuộc vào role in ra thông tin các quyền của một user

$role = 'admin'; // vip, mode, member
switch ($role)
{
    default:
        echo '[Bị cấm truy cập]';
    break;   // <------ khi code thi hành gặp break thì thoát switch tại break;
    case 'admin':
        echo '[Được quản lý member]';
    case 'mod':
        echo '[Được viết bài]';
    case 'vip':
        echo '[Được đọc bài đặt biệt]';
    case 'member':
        echo '[Được đọc bài viết thường]';
}
/*
    [Được quản lý member][Được viết bài][Được đọc bài đặt biệt][Được đọc bài viết thường]
    Hãy thử gán $role bằng các giá trị khác để xem switch rẽ nhánh tương ứng.
*/

Không bắt buộc nhưng để đơn giản, dễ đọc, thì nên viết lệnh switch mà mỗi case nên có break; thể thoát lệnh switch; và khối default nên để cuối cùng.

switch (biểu_thức){
    case giá_trị_1:
        các dòng code ...
    break;

    case giá_trị_n:
        các dòng code ...
    break;

    default:
        các dòng code ...
    break;
}

Ví dụ: in ra màn hình hôm nay là thứ mấy cho các ngày làm việc (T2 - T6) còn Thứ 7 và CN in ra 'NGÀY NGHỈ'

$d = date("D");
switch ($d){
    case "Mon":
        echo "Hôm nay là Thứ Hai";
        break;

    case "Tue":
        echo "Hôm nay là Thứ Ba";
        break;

    case "Wed":
        echo "Hôm nay là Thứ Tư";
        break;

    case "Thu":
        echo "Hôm nay là Thứ Năm";
        break;

    case "Fri":
        echo "Hôm nay là Thứ Sáu";
        break; 
    default:
        echo "NGÀY NGHỈ";
    break;                      // <---- Đây là điểm cuối của switch nên có thể bỏ break;    
}

Đăng ký nhận bài viết mới
Sử dụng toán tử (Bài trước)
(Bài tiếp) Vòng lặp Php