第6章 ユーザー定義関数 / 第3回 模擬試験
PHPの引数の参照渡しに関する次の記述のうち、正しいものはどれか。
参照渡しにするには、関数定義の引数名の前に`&`を付ける。
正解
参照渡しにした引数は、関数内で変更しても呼び出し元には影響しない。
PHPの引数はデフォルトで参照渡しである。
参照渡しは配列型の引数には使用できない。
解説
関数の仮引数を参照渡しにするには、関数定義側で引数名の前に`&`を付けます(`function foo(&$x) { ... }`)。これにより、関数内で`$x`に加えた変更が呼び出し元の変数にも反映されます。
他の選択肢が誤りである理由は次の通りです。
・参照渡しにした引数を関数内で変更すると、その変更は呼び出し元の変数にも反映されます(「影響しない」は値渡しの説明で、逆です)。
・PHPの引数はデフォルトでは値渡しです。参照渡しにするには明示的に`&`を付ける必要があります。
・参照渡しは配列型の引数にも問題なく使用できます(`function addItem(array &$arr) { $arr[] = 'new'; }`のように)。
例:
```
function increment(&$x) {
$x++;
}
$n = 5;
increment($n);
echo $n; // 6(呼び出し元の変数が変更されている)
```
(参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.3.2節 引数の参照渡し p.281〜283)
関連する問題
- 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の変数のスコープに関する次の記述のうち、正しいものはどれか。