第4章 制御構文 / 第3回 模擬試験
PHPの`if`命令と条件式に関する次の記述のうち、正しいものはどれか。
`if`命令の条件式には、真偽値(`bool`型)の変数以外は指定できない。
`if`命令の中括弧`{}`は、処理が1文だけの場合は省略できる。
正解
`if`命令は`elseif`を複数回使用することはできない。
条件式の中で代入演算子`=`を使うと、必ずコンパイルエラーになる。
解説
`if`命令の中括弧`{}`は、実行したい処理が1文だけの場合は省略できます(ただし可読性やバグ防止の観点から、省略しないことが一般的に推奨されます)。
他の選択肢が誤りである理由は次の通りです。
・`if`命令の条件式には、`bool`型の変数に限らず、文字列・数値・配列など任意の式を指定できます。`bool`型でない値は、PHPの「truthy/falsy」のルールに従って自動的に真偽判定されます(例: 空でない文字列や配列は`true`扱い)。「`bool`型の変数以外は指定できない」というのは誤りです。
・`if`文では`elseif`を必要な数だけ繰り返し使用できます。使用回数に制限はありません。
・条件式の中で`=`(代入演算子)を使うこと自体はPHPの構文として有効です(コンパイルエラーにはなりません)。ただし`if ($x = 1)`のように`==`と書き間違えると、意図せず代入が行われてしまう典型的なバグの原因になるため注意が必要です。
例:
```
if (true) echo '1文だけなら中括弧省略可';
if ("0以外の文字列") { // 文字列でもtruthyならif内が実行される
echo 'truthy';
}
$x = 0;
if ($x = 5) { // ==の書き間違い(バグの温床)でも構文エラーにはならない
echo $x; // 5(代入された値がそのままtrueと評価される)
}
```
(参照: 独習PHP 第4版 第4章 制御構文 4.1.4節 中カッコは省略可能 p.129)
関連する問題
- 次のコードの実行結果として正しいものはどれか。 ```php $num = ['zero', 'one', 'three']; $num[3] = 'four'; $num[2] = 'two'; print ('【loop_A】'); for ($i = 0, $count_num = count($num); $i < $count_num; $i++) { print ($num[$i] . ','); } print ('【loop_B】'); foreach ($num as $i => $n) { print ($i . ','); } ```
- PHPの条件分岐に関する次の記述のうち、誤っているものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $i = 1; while ($i <= 5) { print $i; $i++; } ```
- PHPのループ制御に関する次の記述のうち、正しいものはどれか。
- PHPの条件分岐に関する次の記述のうち、正しいものはどれか。