PHP具有标准的控制流构造——条件语句(、、)、循环语句(、、)和分支语句(、)——加上一些独特的功能,如用于数组的和现代表达式。
ifswitchmatchforforeachwhilebreakcontinueforeachmatch<?php
if ($score >= 90) {
$grade = "A";
} elseif ($score >= 80) {
$grade = "B";
} else {
$grade = "F";
}
// ternary and null coalescing
$status = $age >= 18 ? "adult" : "minor";
$name = $input ?? "default"; // ?? — use default if null/unset (PHP 7+)
$value ??= "x"; // ??= assign if null (PHP 7.4)
null合并运算符?? 在PHP中被广泛使用于默认值处理(如果左侧为null或未设置,则返回右侧)——比isset()检查更简洁。
switch ($day) {
case "Sat":
case "Sun":
$type = "weekend"; break; // ⚠️ break needed or it falls through
default:
$type = "weekday";
}
// match (PHP 8) — cleaner: returns a value, STRICT comparison, NO fall-through
$type = match($day) {
"Sat", "Sun" => "weekend", // multiple values, no break needed
default => "weekday",
};
match表达式(PHP 8)是对switch的现代改进:它返回一个值,使用严格的(===)比较,没有贯穿(不需要break)——在新代码中优先使用。
for ($i = 0; $i < 10; $i++) { }
foreach ($items as $item) { } // iterate array values
foreach ($map as $key => $value) { } // keys + values — the PHP idiom for arrays
while ($condition) { }
do { } while ($condition);
foreach是PHP中最符合习惯、使用最频繁的循环,用于迭代数组(对于关联数组使用$key => $value形式)。
foreach ($items as $item) {
if ($item->skip) continue; // skip to next iteration
if ($item->stop) break; // exit the loop
}
控制流是表达逻辑的基本机制,用于每个程序,因此理解PHP的构造是基本的日常知识。
大多数都是标准的,但几个PHP特定的要点很重要:foreach是PHP中遍历无处不在的数组的习惯性、主流循环(对于映射使用$key => $value形式);null合并运算符??(和??=)被广泛用于简洁的默认值处理(一个明显的PHP习语);现代match表达式(PHP 8)是对容易出错的switch的重要改进——返回一个值、使用严格比较并消除贯穿漏洞(经典的switch陷阱是忘记break)。
了解这些构造,并优先使用现代、更安全的形式(match代替switch、使用??处理默认值),是编写干净、符合习惯、无bug的PHP逻辑的日常知识,体现了对基础和现代PHP改进的熟练掌握。