第6章 ユーザー定義関数 / 第1回 模擬試験
PHPの匿名関数とアロー関数に関する次の記述のうち、正しいものはどれか。
匿名関数は、`function`キーワードの後に名前を付けて定義する。
アロー関数は、`fn`キーワードを使用して定義され、複数の文からなる処理ブロックを自由に記述できる。
匿名関数は、`use`キーワードを使用して親スコープの変数を引き継ぐことができる。
正解
アロー関数は、PHP 7.0で導入された。
解説
匿名関数(クロージャ)は、`use`キーワードを使って、定義された時点の親スコープの変数を関数内に取り込んで利用できます(既定では値渡しでコピーされます)。
他の選択肢が誤りである理由は次の通りです。
・匿名関数は「名前を持たない」関数です。`function`キーワードの後に名前を付けてしまうと、それは通常の名前付き関数の定義になります。
・アロー関数は`fn`キーワードで定義され、本体には単一の「式」だけを書けます。複数の文からなる処理ブロックを自由に記述することはできません(そのような処理が必要な場合は通常の無名関数`function () {...}`を使います)。
・アロー関数はPHP 7.4で導入された比較的新しい機能です。PHP 7.0ではまだ使用できません。
例:
```
$tax = 0.1;
$withTax = function ($price) use ($tax) {
return $price * (1 + $tax);
};
$double = fn($x) => $x * 2; // 単一の式のみ
// $bad = fn($x) => { $y = $x * 2; return $y; }; // Parse error
```
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.4.4〜6.4.5節 無名関数/use命令 p.294〜298)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。
- PHPの関数の引数に関する次の記述のうち、正しいものはどれか。