第6章 ユーザー定義関数 / 第5回 模擬試験
PHPのアロー関数(`fn`)に関する次の記述のうち、正しいものはどれか。
アロー関数は`fn(引数) => 式`という構文で、単一の式の評価結果を自動的に返す。
正解
アロー関数は複数行の処理ブロックを自由に記述できる。
アロー関数は親スコープの変数を利用するために`use`キーワードが必須である。
アロー関数はPHP5から存在する古い機能である。
解説
アロー関数は`fn(引数) => 式`という構文で定義し、`=>`の右側に書いた「単一の式」を評価した結果が、`return`を書かなくても自動的に戻り値になります。
例:
```
$double = fn($x) => $x * 2;
echo $double(5); // 10
```
他の選択肢が誤りである理由は次の通りです。
・アロー関数の本体には、単一の式のみを記述できます。複数の文からなる処理ブロックを自由に書くことはできません(複数文が必要な場合は通常の無名関数`function () {...}`を使います)。
・アロー関数は、親スコープの変数を`use`キーワードなしで「自動的に」キャプチャして利用できます。「`use`キーワードが必須」というのは誤りです(`use`が必要なのは通常の無名関数の方です)。
・アロー関数はPHP 7.4で導入された比較的新しい機能です。「PHP5から存在する」というのは誤りです。
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.4.6節 アロー関数 p.298)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。