Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

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

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

$a =& $b

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

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

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

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

注意 &演算子を使用しないとオブジェクトのコピーが 生成されます。もし$thisをクラスの中で使用すると、 この変数は、そのクラスの現在のインスタンスを指します。 &無しに値を割り当てるとインスタンス(つまりオブジェクト) のコピーが生成され、$thisはコピーを指すことに なります。この挙動が望ましくない場合もあるでしょう。というのも普通は パフォーマンスとメモリ効率の面から考えて動作するインスタンスは一つ で十分だからです。

@newのように使用することにより、コンストラクタ におけるエラーを@演算子を使用することが できますが、これは、&new命令を用いた場合は 動作しません。これは、Zend Engineの制限であり、パースエラーを 発生します。

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

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

$a=5;
foo ($a);

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

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