第6章 ユーザー定義関数 / 第2回 模擬試験

PHPの変数のスコープに関する次の記述のうち、正しいものはどれか。

関数内で定義したローカル変数は、関数の外からアクセスできる。
グローバル変数を関数内で使うには`global`キーワードで宣言するか、`$GLOBALS`配列を使う。 正解
`static`変数は関数が呼び出されるたびに初期値にリセットされる。
PHPには変数のスコープという概念は存在しない。
解説
関数内でグローバル変数を直接使いたい場合は、`global $varName;`と宣言してその変数名をグローバル変数への参照に切り替えるか、`$GLOBALS['varName']`配列経由でアクセスします。 他の選択肢が誤りである理由は次の通りです。 ・関数内で定義したローカル変数は、その関数の実行が終わると破棄され、関数の外から直接アクセスすることはできません。 ・`static`変数は最初の呼び出し時にのみ初期化され、以降の呼び出しでは前回終了時点の値を保持し続けます(毎回リセットされるわけではありません)。 ・PHPには「グローバルスコープ」と「関数(ローカル)スコープ」の区別があり、変数のスコープという概念は存在します。 例: ``` function counter() { static $count = 0; $count++; return $count; } echo counter(); // 1 echo counter(); // 2(staticなのでリセットされない) ``` (参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.2節 変数の有効範囲 p.273〜278)