変数の参照渡しとは、ある変数に代入した値を、他の変数から参照すること。一方の変数は、もう一方の変数の、別名(エイリアス)となる。
変数Aと変数Bを参照するには、変数Aの前に&
を付け、参照渡しで、変数Bへ代入する。その後、変数Aを再定義すると、変数Bも再定義される。変数Bを再定義すると、変数Aも再定義される。つまり、どちらか一方の変数を再定義すると、もう一方の変数を再定義する。「一方の変数は、もう一方の変数の、別名(エイリアス)」とも言える。
どちらか一方の変数を再定義しても、もう一方の変数を再定義させたくないときは、変数の値渡しを使う。
オブジェクト変数の参照渡しについては、オブジェクト変数の参照渡しのページへ。
参照渡しで代入
$varA = "サンプル"; // 文字列「サンプル」を代入
$varB = &$varA; // $varAを参照渡しで代入
$varB = &$varA; // $varAを参照渡しで代入
変数$varA
に、文字列「サンプル」を代入。変数$varB
に、変数$varA
を参照渡しで代入。
サンプル
<?php
$varA = "レッド";
$varB = $varA; // 値渡しで代入
$varC = &$varA; // 参照渡しで代入
$varA = "ブルー"; // $varAを再定義すると、$varCの値も変わることに注目
echo '$varA: ' . $varA . '<br />';
echo '$varB: ' . $varB . '<br />';
echo '$varC: ' . $varC . '<br />';
$varC = "イエロー"; // $varCを再定義すると、$varAの値も変わることに注目
echo '$varA: ' . $varA . '<br />';
?>
$varA = "レッド";
$varB = $varA; // 値渡しで代入
$varC = &$varA; // 参照渡しで代入
$varA = "ブルー"; // $varAを再定義すると、$varCの値も変わることに注目
echo '$varA: ' . $varA . '<br />';
echo '$varB: ' . $varB . '<br />';
echo '$varC: ' . $varC . '<br />';
$varC = "イエロー"; // $varCを再定義すると、$varAの値も変わることに注目
echo '$varA: ' . $varA . '<br />';
?>
↓↓↓出力結果↓↓↓
$varA: ブルー
$varB: レッド
$varC: ブルー
$varA: イエロー
$varB: レッド
$varC: ブルー
$varA: イエロー