第6章 ユーザー定義関数 / 第4回 模擬試験
PHPの`use`命令(クロージャの外部変数キャプチャ)に関する次の記述のうち、正しいものはどれか。
`use (&$var)`のように参照渡しで指定すると、クロージャ内での変更が外部の変数にも反映される。
正解
`use`で取り込んだ変数は、クロージャ内で変更すると自動的に外部変数にも反映される(デフォルトで参照渡し)。
`use`命令はアロー関数(`fn`)でのみ使用できる。
`use`命令はクラスの継承に使用するキーワードである。
解説
`use ($var)`はデフォルトで値渡し(クロージャ生成時点の値をコピー)です。参照渡しにしたい場合は`use (&$var)`と明示する必要があります。`use`はクロージャの構文であり、アロー関数は自動キャプチャのため`use`不要です。(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.4.5節 親スコープの変数を引き継ぐ p.296〜297)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。