[PHP-users 20201]Re: コピーせずにリファレンス渡しになる
奥村
okuran_php_ml @ hotmail.com
2004年 2月 3日 (火) 10:35:31 JST
岡部様、ご返答有難うございます。
$ObjTest = new test();
$ObjTest->setVal("aaa");
の時点でvar_dump($ObjTest);をすると
object(test)(1) {
["Val"]=>
string(3) "aaa"
}
となっており、プロパティはリファレンスではありません。
そして、
$Val =& $ObjTest->getVal();
を実行した後にvar_dump($ObjTest);をすると
object(test)(1) {
["Val"]=>
&string(3) "aaa"
}
となっている事がわかりました。
これは「=&」によるリファレンス渡しを行った事で、
PHPが自動的に、プロパティに格納されていた「aaa」がメモリの違う場所に格納し、
プロパティにはそのリファレンスが格納したと思います。
つまり
> <?php
> $a =& $b
> ?>
> この場合、$aと$bは同じ変数を指します。
> 注意: ここで、$aと$bは完全に同じで、$aが$bを指しているわけでは
> なく、その逆でもありません。$aと$bは同じ場所を指しているのです。
と言う事ですね。
だからオブジェクト自体はコピーされているけど
プロパティがリファレンスだったので、結果的に同じ変数を見ている
と言う理解で正しいでしょうか?
僕は$aが$bを指していると考えていたので
「おかしな動作だ」と思っていました。
PHP-users メーリングリストの案内