他の変数への参照

PHP では、変数には値だけでなく他の変数への参照を代入することもできます。参照を代入すると値のコピーは行われず、2つの変数が同じ値を参照するようになります。そのため、一方の変数の値を変更するともう一方にも反映されます。ここでは PHP で変数に参照を代入する方法について解説します。

変数へ他の変数の参照を代入する

変数に他の変数を代入すると格納されていた値のコピーが代入されますが、他の変数への参照を代入すると 2 つの変数が値を格納する場所を共有していることになります。その為、変数に格納された値を取りだすと同じ値になりますし、どちらかの変数を使って変数に別の値を代入すると、他の変数の値も変わります。

他の変数への参照を設定するには次のように記述します。

変数 =& 他の変数

= の代わりに =& を使うことで、右辺の変数への参照を左辺の変数に代入できます。

$num1 = 320;
$num2 =& $num1;

この場合、変数 num1 と変数 num2 の値は同じ場所に保管され値を共有しているので、値を取得するとどちらも 320 となります。

では変数 num1 に別の値を代入してみます。

$num1 = 320;
$num2 =& $num1;

echo $num1; // 320
echo $num2; // 320

$num1 = 45;
echo $num1; // 45
echo $num2; // 45

変数 num1 と変数 num2 は同じ場所を共有しているので、変数 num1 に対して別の 45 という値を代入すると、もう一つの変数 num2 の値も 45 となります。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$num1 = 63;
$num2 =& $num1;

echo "num1 =",$num1;
echo ", num2 =",$num2,"\n";

$num1 = 18;
echo "num1 =",$num1;
echo ", num2 =",$num2,"\n";

$num2 = 75;
echo "num1 =",$num1;
echo ", num2 =",$num2,"\n";

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

変数へ他の変数の参照を代入する

2つの変数は値を保存する同じ場所を参照しているので、どちらかの変数の値を変更すると、もう片方の変数の値も変更されます。

変数へ代入した他の変数の参照を解除する

変数に対して別の変数への参照を代入した場合、その変数に別の値を代入しても参照は解除されません。変数に代入した他の変数への参照を解除するには unset を使って次のように行ってください。

$num1 = 320;
$num2 =& $num1;

unset($num2);  // 参照を解除する

unset は変数や配列要素を削除するために使用するもので、変数に対して使用すると変数が未定義の状態となります。まだ変数に一度も値を代入していない状態と同じになりますので、変数をこのあと使用する場合は値を代入する必要があります。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$num1 = 63;
$num2 =& $num1;

echo "num1 =",$num1;
echo ", num2 =",$num2,"\n";

$num1 = 18;
echo "num1 =",$num1;
echo ", num2 =",$num2,"\n";

unset($num2);
$num2 = 75;
echo "num1 =",$num1;
echo ", num2 =",$num2,"\n";

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

変数へ代入した他の変数の参照を解除する

いったん変数には他の変数への参照を代入していますが、 unset を使って解除を行うとそれぞれの変数は別の値の保管場所を使用するようになります。

-- --

PHP で変数に参照を代入する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。