変数を参照

広告

前のページで変数は変数毎に値を格納するための領域を持つことを説明しました。PHPではこのような変数の使い方の他に、他の変数への参照を設定することも可能です。

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

変数 =& 他の変数

「=」の代わりに「=&」を使うことで、右辺の変数の値をコピーするのではなく、右辺の変数のエイリアスとして左辺の変数を設定します。この結果、右辺の変数が格納された値に左辺の変数名でもアクセスできるようになります。

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

この場合、変数「num1」と変数「num2」の値はどちらも「320」となっています。

では変数「num1」に別の値を格納してみます。

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

$num1 = 45;

変数「num1」と変数「num2」は同じ値に対する別名の関係のため、変数「num1」の値をあとから変更した場合は変数「num2」が格納している値も同じように変更されます。あくまで1つの格納領域に2つの変数名が付いているだけのためです。

サンプルプログラム

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

sample5-1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
<?php
$num1 = 320;
$num2 =& $num1;

print '$num1 ='.$num1.'<br />';
print '$num2 ='.$num2.'<br />';

$num1 = 18;

print '$num1 ='.$num1.'<br />';
print '$num2 ='.$num2.'<br />';

$num2 = 75;

print '$num1 ='.$num1.'<br />';
print '$num2 ='.$num2;
?>
</p>

</body>
</html>

上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。

変数を参照

2つの変数は片方の変数への参照となっているため、どちらかの変数に別の値を格納すると、もう片方が格納している値にも反映されます。

( Written by Tatsuo Ikura )