
PHP8 上級/準上級試験の認定模擬問題として、プライム・ストラテジー様のPRIME STUDYが認定されているようです。ただ、この模擬問題には解説がありませんので解説をまとめていこうと思います。シリーズ第16回目です。

PHP初級レベルから脱却して中級/上級レベルにいきたい人にピッタリの内容ですね。
PRIME STUDY認定模擬問題のリンクはこちらです → https://study.prime-strategy.co.jp/
問題文
制御構造に関する説明の中で、誤っているものを1つ選びなさい。
なお、すべてのコードの先頭には下記のコードが書かれているものとする。
declare(strict_types=1);
error_reporting(-1);
(1)
PHP の制御構造 (if, while, for, foreach, switch) では、波括弧 {} の変わりに「開き波括弧をコロン(:)、閉じ波括弧をそれぞれ endif;, endwhile;, endfor;, endforeach;, endswitch; に変更する」事が出来る。そのため、以下のコード
<?php
$i = 10;
if ($i > 9) : ?>
$i は9より大きい
$i は9以下
を実行すると、結果は次のとおりとなる。
$i は9より大きい
(2)
break は、現在実行中の for, foreach, while, do-while, switch 構造の実行を終了する。そのため、以下のコード
for($i = 0; $i < 10; ++$i) {
echo "{$i}¥n";
break;
}
を実行すると、結果は次のとおりとなる。
0
(3)
break は、現在実行中の for, foreach, while, do-while, switch 構造の実行を終了する。
また、break ではオプションの引数でネストしたループ構造を抜ける数を指定することができる。
いくつかネストしているループの内側で「その全てのループを抜け出したい」場合、大きな値をとりあえず入れておくとよい。そのため、以下のコード
$i = $j = 0;
while($i < 10) {
echo "i is {$i}", PHP_EOL;
$i ++;
while($j < 10) {
echo "j is {$j}", PHP_EOL;
$j ++;
break 999;
}
}
を実行すると、結果は次のとおりとなる。
i is 0
j is 0
(4)
continue は、ループ構造 (for, foreach, while, do-while) において現在の繰り返しループ の残りの処理をスキップし、条件式を評価した後に 次の繰り返しの最初から実行を続けるために使用される。
PHP 7.3 以降、switch 内部で break 文のように振る舞おうとする continue については、E_WARNING をトリガーするようになった。そのため、以下のコード
$i = 2;
switch($i) {
case 0:
case 1:
echo "i is {$i}", PHP_EOL;
continue;
default:
echo "i is {$i}: final", PHP_EOL;
continue;
}
PHP 7.2 までであれば、結果は次のとおりとなる。
i is 2: final
PHP 7.3 以降は、結果は次のとおりとなる。
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in ….
解説
選択肢1の解説
正しいです。
PHP の制御構造では、波括弧 {} の代わりにコロン : と endif; などの構文を使うことができます。この記法は、HTML と PHP を混ぜて記述する際によく使われます。
選択肢2の解説
正しいです。
break はループや switch の実行を終了させます。このコードでは、break が最初のループを抜けるため、出力は 0 のみになります。
選択肢3の解説
誤りです。
break において、大きな値(999)を指定する必要はなく、適切なループ数(通常は 1 や 2)を指定することが望ましいです。
選択肢4の解説
正しいです。
continue は現在のループの残りの処理をスキップして次の繰り返しから実行を再開します。PHP 7.3 以降では、switch 内で continue を使うと警告が出るようになり、continue 2 として switch を抜ける動作を明示する必要があります。
正解選択肢
以上より選択肢3が正解となります。
コメント