投稿

ラベル(リファレンス)が付いた投稿を表示しています

[PHP] 参照(リファレンス)について

参照(リファレンス)とは、メモリ上のアドレスそのものを代入し、複数の変数を同一のものとして扱うことが出来ます。 ここではPHPのリファレンスについて正しく理解するためにまとめます。 リファレンスの代入 構文 変数の前に「&」を付けると、変数のメモリ上のアドレスであるリファレンスを取得することが出来ます。 &変数 [実装例]リファレンスの代入 コード 以下の例では、変数$aの参照を変数$bに代入し、そのあと変数$bを更新しています。 $a = 1; $b = &$a; $b = 2; var_dump($a, $b); 実行結果 実行すると変数$a、$bどちらも同じように更新されていることが分かります。 $ php test_reference.php int(2) int(2) [実装例]リファレンスの解除 コード unset関数でリファレンスの解除が出来ます。 $a = 1; $b = &$a; unset($b); $b = 2; var_dump($a, $b); 実行結果 $ php test_reference.php int(1) int(2) 参照渡し 関数やメソッドの引数に、変数の参照を渡してやることが出来ます。 [実装例]参照渡し コード 以下の例では、関数addVarの引数を参照渡しにして、関数内で$varの値を更新しています。 function addVar(int &$var) { $var++; } $var = 1; addVar($var); var_dump($var); 実行結果 実行結果は、関数の外で宣言された$varの値が更新されていることが分かります。 $ php test_reference.php int(2) 変数以外を渡すとエラー 参照渡しが設定されている引数に、変数以外の値を直接渡すことはできません。 例えば関数addVarの呼び出しを、 addVar(1); とすると、以下のエラーが発生します。 $ php test_reference.php Fatal error: Uncaught Error: addVar(): Argument #1 ($var) cann