参照について

PHPでは

<?php
$a
=& $b;
function
hoge(&$arg)
hoge(&$arg)
?>


というような表記がよく使われます。
この意味がよく分からず、検索しても&$とかは引っかからず困ったという経験がありますのでここに書きます。

まず $a =& $b というのは $a に $b のアドレスを入れています。$a = &$b と書くと分かりやすいのでしょうか。どうも最初に見たときは意味不明でした。

参照を渡すというのは、$a の値を変更すると $b の値も変更されるという感じです。コピーしないので大きなオブジェクトなどの場合は多少高速でしょう。

$b = 1;
$a =& $b;
$a = 3;
で、$b が 3 になる。


あと、 function hoge(&$arg) は、関数に参照を渡しています。

関数内で $arg を変更すると呼び出し元の値も変わります。

<?php
$a
= "hage";
hoge($a);
echo
$a; // fuge が出力される

function hoge(&$arg)
{
    
$arg = "fuge";
}
?>


といった感じにですね。

関数の宣言に指定しなくても、関数を呼ぶときに

<?php
$a
= "hage";
hoge(&$a);
echo
$a; // fuge が出力される

function hoge($arg)
{
    
$arg = "fuge";
}
?>


のようにも出来ると思います。

ただ、この方法は最近のPHPでは禁止されていて、記述するとエラーが出ます。
なので、参照渡しの場合は function hoge(&$arg) の形式を使った方がよいです。