第6章 ユーザー定義関数 / 第4回 模擬試験
PHPの`static`変数に関する次の記述のうち、正しいものはどれか。
`static`変数は、関数呼び出しが終わっても値を保持し続け、次回呼び出し時に引き継がれる。
正解
`static`変数はグローバル変数と全く同じ意味を持つ。
`static`変数は配列型には使用できない。
`static`変数は宣言時に初期値を指定することができない。
解説
`static $var = 初期値;`のように関数内で宣言した変数は、関数の呼び出しが終わっても値が破棄されず、次回その関数を呼び出した際に前回終了時点の値が引き継がれます(初期化は最初の1回のみ行われます)。
他の選択肢が誤りである理由は次の通りです。
・`static`変数はその関数内だけで有効なスコープを持ち、外部から直接アクセスできるグローバル変数とは異なる概念です。
・`static`変数は配列(`static $list = [];`)としても問題なく使用できます。
・`static`変数は、通常の変数宣言と同様に`static $count = 0;`のように宣言時に初期値を指定できます。
例:
```
function counter() {
static $count = 0;
$count++;
return $count;
}
echo counter(); // 1
echo counter(); // 2
```
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.2.3節 静的変数 p.276〜277)
関連する問題
- PHPの関数引数に関する次の記述のうち、誤っているものはどれか。
- 関数に関する次の記述のうち誤っているものはどれか。
- PHPの匿名関数とアロー関数に関する次の記述のうち、正しいものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $val = 'a'; $val = 'b'; print ('【A】' . $val); function func($val = 'c') { $val = 'd'; print ('【B】' . $val); global $val; print ('【C】' . $val); $val = 'e'; print ('【D】' . $val); $val = 'f'; } $val = 'g'; func($val); print ('【E】' . $val); ```
- PHPの変数のスコープに関する次の記述のうち、正しいものはどれか。