作成日:2006/05/10
1E.4 リファレンスの生成
- 構文:リファレンスの生成
- $変数名 =& 式;
リファレンスは参照元の変数の「エイリアス」になります。式として許されるのは以下のものです。
- 変数
- new演算子
- リファレンスを返す関数
この構文で生成されるリファレンスはいわゆるハードリファレンスです。 ハードリファレンスはUNIXファイルシステムのハードリンクに良く似た概念です。 実体(値)が1つでそれを識別する名前が複数ある場合を想定して見て下さい。 PHPでは変数の値と名前を別々に管理しているので、同じ値に複数の名前を付ける事ができます。 変数が削除(unset)される場合、それは変数名と値の結合が解除された事を意味し、値が破棄される意味ではありません。 従って、2つの変数名を持つ値の場合、一方の変数名が削除(unset)されても、他方の変数名とその値は有効です。
PHPのリファレンスはC言語のポインタやPerlのリファレンスとは異なった概念です。 両者は明示的な間接参照の手段としてポインタやリファレンスを使っています。 C言語の場合は、ポインタをポインタ型変数に値として保持し、間接参照演算子(*)を使って値を参照しています。 Perlの場合は、リファレンスをスカラー型変数に保持し、デリファレンスを通して値を参照しています。 PHPには間接参照演算子やデリファレンスの構文がありません。 PHPのレファレンスは変数名とおなじで、使用するたびに暗黙の参照が実行されます。 これが「リファレンスは変数のエイリアス」と言われる所以です。
用例:
$foo = 'Hello'; $bar = &$foo; // $fooのエイリアスを作成 $bar = 'World'; // $fooの値も'World'になる unset($foo); // $fooを削除 echo $foo; // 何も出力されない($fooはNULL) echo $bar; // 'World'を出力
