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は配列を反復処理するための慣用的で最もよく使われるループです(連想配列の場合は$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に対する重要な改善です — 値を返し、厳密な比較を使用し、フォールスルーバグを排除します(forget breakという古典的なswitchの落とし穴)。
これらの構文を知り、より現代的で安全な形式(switchではなくmatch、デフォルト値には??)を優先することは、クリーンで慣用的でバグのないPHPロジックを書くための日常知識であり、基礎と現代的なPHPの改善の両方への熟練を反映しています。