PHPの制御構文(if/for/foreach)を初級試験目線で解説
条件分岐・繰り返し処理といった制御構文は、PHPプログラムの流れを組み立てる基本です。 PHP8技術者認定初級試験でも頻出のテーマであり、コードの実行結果を正確に追えるかが問われます。
if / elseif / else による条件分岐
条件を上から順に評価し、最初に真になった分岐だけが実行されます。
elseifの条件は前の条件が偽の場合のみ評価される点に注意しましょう。
$score = 75;
if ($score >= 90) {
echo 'A評価';
} elseif ($score >= 70) {
echo 'B評価';
} else {
echo 'C評価';
}
match式(PHP8の新機能)とswitchの違い
PHP8で追加されたmatch式は、switchと似ていますが
厳密比較(===)で判定され、breakが不要で、式として値を返せる点が異なります。
$grade = 'B';
// switchと違い、match式は「厳密比較(===)」で判定し、breakが不要
$message = match ($grade) {
'A' => '優秀です',
'B', 'C' => '合格ラインです',
default => '要復習です',
};
for・while・do-whileによる繰り返し
回数が決まっている繰り返しにはfor、
条件を満たす間繰り返すにはwhileを使います。
do-whileは条件判定より先に、本文が必ず1回は実行される点が試験の頻出ポイントです。
for ($i = 1; $i <= 3; $i++) {
echo "{$i}回目\n";
}
$i = 0;
while ($i < 3) {
echo $i;
$i++;
}
// do-whileは条件判定より先に必ず1回実行される
$j = 10;
do {
echo $j;
} while ($j < 5);
foreachと参照渡しの注意点
foreach ($array as &$value)のように参照渡しでループすると、
元の配列の要素を直接書き換えられます。ただし、ループ後にunset()で
参照を解除しないと、意図しない値の上書きにつながることがあり、試験でも狙われやすいポイントです。
$numbers = [1, 2, 3];
foreach ($numbers as &$n) {
$n *= 10;
}
unset($n); // 参照を明示的に解除しないと予期しない不具合の原因になる
// $numbers は [10, 20, 30]
break と continue の使い分け
continueはそのループの残り処理をスキップして次の周回へ進み、
breakはループそのものを終了します。実行結果を問う設問で頻出です。
for ($i = 1; $i <= 5; $i++) {
if ($i === 3) {
continue; // 3のときだけスキップして次のループへ
}
if ($i === 5) {
break; // 5になったらループを抜ける
}
echo $i;
}
// 出力: 1 2 4