リファレンスが行うことは何ですか?

PHPのリファレンスにより二つの変数が同じ内容を参照することが可能で す。つまり、以下のようなものを実行した場合です。


$a =& $b
     

この場合、$a$bは同じ変数を 指します。

注意 ここで、$a$bは完全に同じ で、$a$bを指しているわけ ではなく、その逆でもありません。$a$bは同じ場所を指しているのです。

同じ構文は、リファレンスを返す関数やnew演算子で も使用可能です。(PHP 4.0.4 以降)


$bar =& new fooclass();
$foo =& find_var ($bar);
     

注意 上記の構文を使用しない場合、$bar = new fooclass() の結果は、コンストラクタの $this と同じ変数にはなりません。このため、コン ストラクタで $this へのリファレンスを使用する 際には、リファレンスによる代入を使用するか、二つの異なったオブジェ クトを取得する必要があります。

リファレンスの第2の使用法は、変数のリファレンス渡しです。この場合、 関数でローカル変数が作成され、コール側の変数と同じ内容へのリファレ ンスとなります。例を示します。


function foo(&$var) {
  $var++;
}

$a=5;
foo($a);
     

この結果、$a は 6となります。これは、関数 fooの中では、変数$var$aと同じ内容を指しているためです。 リファレンス渡し に関するより詳細な説明も参照下さい。

リファレンスの第3の使用法は、 リファレンスによる返り値 です。