[PHP-users 20199]Re: コピーせずにリファレンス渡しになる
ISIGE, Akira
xia @ silvia.com
2004年 2月 2日 (月) 21:01:42 JST
いしげ です.
On 2004/02/02 20:02:53 JST,
"奥村" <okuran_php_ml @ hotmail.com> wrote:
> Class test {
> var $Val;
> Function setVal ($pVal) {
> $this->Val = $pVal;
> }
> Function getVal () {
> Return $this->Val;
> }
> }
> $ObjTest = new test();
>
> $ObjTest->setVal("aaa");
> $Val =& $ObjTest->getVal();
>
> $ObjTestCopy = $ObjTest;
> $ObjTestCopy->setVal("bbb");
>
> Echo $Val;
> マニュアルにもあるように「$ObjTestCopy = $ObjTest;」では
> コピーが生成されるはずなので「aaa」が返ってくると思っていたのですが、
> 「bbb」が返ってくるのでビックリしています。
> この動作は正しいのでしょうか?
興味を持ったので手元の Windows 版 4.3.3 で実験してみたところ,
同様の結果になりました.
途中の $Val に代入するところで,=& でなく = を使用すると,
完全に期待通りの動作になります.
順序を変えて,$Val への代入を $ObjTestCopy = $ObjTest の後に行なうと,
これまた期待通りの動作になりました.
getVal() が & 付きで定義されていないので,
その戻り値を =& で代入しても = で代入しても動作は同じではないかと
思ったのですが,内部的には異なるのでしょうか……
試しに getVal() を & 付き宣言にして $Val とリファレンスで結合するような
コードにしてみましたが,結果は同じでした.
マニュアルには & 付きでない宣言の関数の帰り値を =& で結合しようとした場合の
挙動については載っていないようですが……いわゆる「不定」でしょうか :-)
--
ISIGE, Akira
PHP-users メーリングリストの案内