第2章 PHPの基本 / 第1回 模擬試験

次のコードの実行結果として正しいものはどれか。 ```php $n = 2; $p = 3; ++$n; $p *= 2; $a = "$n, $p"; --$n; $p *= 3; $b = "$n, $p"; print $a . ' / ' . $b; ```

3,6 / 1, 9
3, 6 / 2, 18 正解
3,9 / 1, 9
3, 9 / 2, 27
解説
インクリメント/デクリメント演算子(`++`, `--`)と複合代入演算子(`*=`)の評価順序を1行ずつ追うと次の通りです。 ・初期値: `$n = 2; $p = 3;` ・`++$n;` → `$n = 3` ・`$p *= 2;` → `$p = 3 * 2 = 6` ・`$a = "$n, $p";` → `$a = "3, 6"` ・`--$n;` → `$n = 2` ・`$p *= 3;` → `$p = 6 * 3 = 18` ・`$b = "$n, $p";` → `$b = "2, 18"` したがって出力は`3, 6 / 2, 18`になります。 例: ``` $n = 2; $p = 3; ++$n; $p *= 2; $a = "$n, $p"; --$n; $p *= 3; $b = "$n, $p"; echo $a . ' / ' . $b; // 3, 6 / 2, 18 ``` 前置インクリメント(`++$n`)は評価前に加算、後置(`$n++`)は評価後に加算という違いも合わせて押さえておきましょう。 (参照: 独習PHP 第4版 第2章 2.1節 変数 / 第3章 3.2節 代入演算子 p.50〜98)