こんにちは。PHP技術者認定機構 CTOの古庄道明です。
今日もPHP8初級試験の模擬問題と解説を紹介します。
以下を解いて出題のイメージと知識を補っていただけると幸いです。
問題
コードAをコードBで代替して同じ実行結果を得たい場合、コードBの【 A 】に入るものとして正しいものはどれか。
[ コードA ]
$i = 1;
while ($i <= 20) {
print ($i . ',');
$i += 2;
[ コードB ]
【 A 】{
print ($i . ',');
}
選択肢
選択肢1
while ($i <= 20, $i += 2)
選択肢2
while ($i += 2; $i <= 20;)
選択肢3
for ($i <= 20, $i += 2)
選択肢4
for ($i += 2; $i <= 20; $i = 1)
選択肢5
for ($i = 1; $i <= 20; $i += 2)
回答と解説
問題は「制御構文について」です。
まずはコードAを見てみましょう。
コードAは以下のように書かれています。
- 初期値として、$i に 1 を代入
- while の条件 $i <= 20 が真である間、ループを継続
- $i を表示
- $i に 2 を加算
結果は以下の通りです。
1,3,5,7,9,11,13,15,17,19,
これと同じ実行結果を得るための「コードB内の【 A 】に入るコード」を探していきましょう。
また、前提として、while 文と for 文の PHP マニュアルも確認しておくとよいでしょう。
https://www.php.net/manual/ja/control-structures.while.php
https://www.php.net/manual/ja/control-structures.for.php
選択肢1 の
while ($i <= 20, $i += 2)
ですが、while 文の条件式の中にカンマ(,)を入れることはできないため、これは単純に構文エラーとなります。
選択肢2 の
while ($i += 2; $i <= 20;)
も同様で、while 文の条件式の中にセミコロン(;)を入れることはできないため、これも構文エラーとなります。
選択肢3 の
for ($i <= 20, $i += 2)
ですが、for 文の構文は for (式1; 式2; 式3) です。各式は空にすることもできますが、この選択肢には区切りのセミコロンがないため、構文エラーになります。
選択肢4 の
for ($i += 2; $i <= 20; $i = 1)
ですが、for 文の 3 つの式は「ループ開始時の処理; 繰り返しの判定; 各繰り返しの後の実行」を表すため、この for 文を while 文で書き換えると、以下のようなコードになります(動かすと無限ループになるので、実行してはいけません)。
$i += 2; // 式1
while ($i <= 20) { // 式2
print ($i . ',');
$i = 1; // 式3
}
そのため「コードAと同じ実行結果」にはならないので、これも選択肢としては誤りになります。
選択肢5 の
for ($i = 1; $i <= 20; $i += 2)
は、正しく「コードAと同じ実行結果」になります。
そのため、正解は選択肢5です。
PHP8初級試験と公式問題集に興味がある方は、以下のページをご覧のうえ、この機会に是非受験ください。
PHP8初級試験
https://www.phpexam.jp/summary/novice8
公式問題集:PHP8技術者認定初級試験公式問題集A
Kindle版 https://amzn.asia/d/1bS88y9
ペーパーバック版 https://amzn.asia/d/3P3Izeu
また、試験対策セミナーは毎月開催しています。興味がある方は以下のページをご覧いただき是非セミナーにもご参加ください。(フォローいただけるとセミナーのご案内が届くようになります)
PHP技術者認定機構の公式Peatixグループ
https://peatix.com/group/43424

