[PHP-users 20198]Re: コピーせずにリファレンス渡しになる
T.Okabe
okabe @ nsd.jip.co.jp
2004年 2月 2日 (月) 20:45:17 JST
岡部といいます。
実は私もリファレンスに対する理解を間違えていましたが、
マニュアルをちゃんと読むと下記のように書いてあります。
http://www.php.net/manual/ja/language.references.php
PHPにおいてリファレンスは、同じ変数の内容を異なった名前で
コールすることを意味します。これはCポインタのようなものでは
なく、シンボル テーブルのエイリアスです。
<省略>
リファレンスは、UNIXファイルシステ ムのハードリンクのようなもの
であると考えられます。
http://www.php.net/manual/ja/language.references.whatdo.php
<?php
$a =& $b
?>
この場合、$aと$bは同じ変数を指します。
注意: ここで、$aと$bは完全に同じで、$aが$bを指しているわけでは
なく、その逆でもありません。$aと$bは同じ場所を指しているのです。
なお、以下はテストしてみた結果です。
>$ObjTest = new test();
>
>$ObjTest->setVal("aaa");
>$Val =& $ObjTest->getVal();
ここまでの状態で、
var_dump($ObjTest);
を見ると、
object(test)(1) {
["Val"]=>
&string(3) "aaa"
}
というように、オブジェクト変数のValの型に
'&string' と、'&' が付いています。
ちなみに、同じ要領で
var_dump($Val);
を見ると、'&' は付いていません。
従って、$ObjTest を $ObjTestCopy にコピーすると、
$ObjTestCopy->Val も '&' が付いた状態になります。
試しに、
$ObjTestCopy->setVal("bbb");
の代わりに、
$ObjTest->setVal("bbb");
$Val = "bbb";
とやっても、$ObjTest->Val と $ObjTestCopy->Val と $Val の
3つとも'bbb'となります。
PHP-users メーリングリストの案内