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

PHPのクロージャ(無名関数)に関する次の記述のうち、正しいものはどれか。

クロージャは`use`キーワードで外部変数を取り込むことができる。 正解
クロージャは変数に代入することができない。
クロージャは常にグローバル変数へ自動的にアクセスできる。
アロー関数(`fn`)は複数の文を含むブロックを記述できる。
解説
無名関数(クロージャ)は、定義時に`use ($var)`と書くことで、定義された時点の親スコープの変数を関数内に取り込んで使用できます(既定では値渡しでコピーされ、`use (&$var)`とすれば参照として取り込めます)。 他の選択肢が誤りである理由は次の通りです。 ・クロージャは`$fn = function () {...};`のように、他の値と同じく変数に代入して保持・呼び出しできます。 ・クロージャは、グローバル変数へ自動的にアクセスすることはできません。グローバル変数を使いたい場合は、通常の関数と同様に`global`キーワードや`$GLOBALS`が必要です。 ・アロー関数(`fn (...) => 式`)は単一の式のみを記述できる構文で、複数の文からなるブロック(`{ }`)は書けません。複数文が必要な場合は通常の無名関数(`function`)を使います。 例: ``` $tax = 0.1; $withTax = function ($price) use ($tax) { return $price * (1 + $tax); }; echo $withTax(1000); // 1100 ``` (参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.4.4〜6.4.5節 無名関数/use命令 p.294〜298)