PHP có các cấu trúc điều khiển luồng tiêu chuẩn — câu lệnh điều kiện (, , ), vòng lặp (, , ) và rẽ nhánh (, ) — cùng vài tính năng đặc trưng như cho mảng và biểu thức hiện đại.
ifswitchmatchforforeachwhilebreakcontinueforeachmatch<?php
if ($score >= 90) {
$grade = "A";
} elseif ($score >= 80) {
$grade = "B";
} else {
$grade = "F";
}
// ternary và null coalescing
$status = $age >= 18 ? "adult" : "minor";
$name = $input ?? "default"; // ?? — dùng mặc định nếu null/chưa đặt (PHP 7+)
$value ??= "x"; // ??= gán nếu null (PHP 7.4)
Toán tử null coalescing ?? được dùng rất nhiều trong PHP cho giá trị mặc định (trả về vế phải nếu vế trái là null hoặc chưa đặt) — gọn hơn các kiểm tra isset().
switch ($day) {
case "Sat":
case "Sun":
$type = "weekend"; break; // ⚠️ cần break nếu không sẽ rơi xuống (fall through)
default:
$type = "weekday";
}
// match (PHP 8) — gọn hơn: trả về giá trị, so sánh NGHIÊM NGẶT, KHÔNG rơi xuống
$type = match($day) {
"Sat", "Sun" => "weekend", // nhiều giá trị, không cần break
default => "weekday",
};
Biểu thức match (PHP 8) là cải tiến hiện đại so với switch: nó trả về một giá trị, dùng so sánh nghiêm ngặt (===) và không rơi xuống (không cần break) — được ưu tiên trong code mới.
for ($i = 0; $i < 10; $i++) { }
foreach ($items as $item) { } // lặp qua các giá trị của mảng
foreach ($map as $key => $value) { } // key + value — thành ngữ PHP cho mảng
while ($condition) { }
do { } while ($condition);
foreach là vòng lặp thành ngữ, được dùng nhiều nhất trong PHP để lặp qua mảng (với dạng $key => $value cho mảng kết hợp).
foreach ($items as $item) {
if ($item->skip) continue; // nhảy sang vòng lặp kế tiếp
if ($item->stop) break; // thoát khỏi vòng lặp
}
Điều khiển luồng là cơ chế cơ bản để biểu đạt logic, được dùng trong mọi chương trình, nên hiểu các cấu trúc của PHP là kiến thức nền tảng hằng ngày.
Hầu hết đều tiêu chuẩn, nhưng vài điểm riêng của PHP đáng lưu ý: foreach là vòng lặp thành ngữ, chủ đạo để lặp qua array phổ biến của PHP (với dạng $key => $value cho map); toán tử null coalescing ?? (và ??=) được dùng nhiều để xử lý giá trị mặc định gọn gàng (một thành ngữ đặc trưng của PHP); và biểu thức match hiện đại (PHP 8) là cải tiến quan trọng so với switch dễ gây lỗi — trả về giá trị, dùng so sánh nghiêm ngặt và loại bỏ lỗi rơi xuống (cạm bẫy kinh điển của switch khi quên break).
Biết các cấu trúc này, và ưu tiên các dạng hiện đại, an toàn hơn (match thay cho switch, ?? cho mặc định), là kiến thức hằng ngày để viết logic PHP gọn gàng, đúng thành ngữ, không lỗi, phản ánh sự thành thạo cả nền tảng lẫn các cải tiến của PHP hiện đại.