[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 メーリングリストの案内