参照渡しとは
この内容については、独習PHP 第3版で以下のように説明されています。
変数に値を格納→厳密にはコンピュータ上に用意されたメモリに格納
メモリにはそれぞれの場所を表す番号(アドレス)が振られている。
変数とは、値の格納先(アドレス)に対してつけられた名札みたいなもの
「=」演算子で変数を代入する=メモリ上の値を別のアドレスにコピーする
ref_val.php
<?php
$x = 1;
$y = $x; // $xの値を$yにコピー
$x = 5; // $xの値を変更
print $y; // 結果:1($xの変更に影響しない)
?>
一方、参照(リファレンス)による代入は、メモリ上のアドレスそのものを引き渡す代入のこと
ref_ref.php
<?php
$x = 1;
$y = &$x; // $xのアドレスを$yにコピー
$x = 5; // $xの値を変更
print $y; // 結果:5($xの変更に影響する)
?>
foreach命令→デフォルトでは配列要素を値渡し
foreach_val.php
<?php
$data = ['渋谷区','豊島区','品川区','新宿区'];
foreach($data as $value){
$value = '東京都'.$value;
}
print_r($data) // 結果:Array([0] => 渋谷区、[1] => 豊島区、[2] => 品川区、[3] => 新宿区
?>
したがって、連想配列の要素を変更したい場合は「&」をつけて参照渡しする
foreach_ref.php
<?php
$data = ['渋谷区','豊島区','品川区','新宿区'];
foreach($data as &$value){
$value = '東京都'.$value;
}
print_r($data) // 結果:Array([0] => 東京都渋谷区、[1] => 東京都豊島区、[2] => 東京都品川区、[3] => 東京都新宿区
?>
参考文献
この記事は以下の情報を参考にして執筆しました。