[PHP-users 20209]Re: コピーせずにリファレンス渡しになる

T.Okabe okabe @ nsd.jip.co.jp
2004年 2月 3日 (火) 12:21:55 JST


岡部といいます。

>重松です。こんにちは。

>アクセス用の関数を用意しないで直接触れば良いだけの気がするので。
# そうですが(特にPHPは)、クラス設計としてオブジェクト変数を
# 直接触らせないというのはよくあることだと思います。

>	$Val =& $hoge = $ObjTest->getVal();
>というように直感的に期待してしまいます。

ML番号20208にも書きましたが、
クラス設計者が、例えば getVal() の返り値をコピーで渡そうとした場合、
そのクラスの利用側で =& を使われても、
重松さんの書かれたように期待したいと私も思います。
勝手にリファレンスにされてしまうと、
クラス内部の動作が設計者の意図から外れる事態もあるでしょうから。

しかし、自分の環境で実験する限りでは、
期待に反して getVal() の返り値をリファレンスで返したのと
同じ動作になってしまいます。

重松さんの仰るとおり、そこまで仕様が考えられていないということでしょうか。

さらに次のような実験をしてみたのですが、
    Function getVal () {
        $val = $this->Val;      //  コピー
        Return $val;
    }
とやっても、
$Val =& $ObjTest->getVal();
によって $ObjTest->Val との間でリファレンス関係が発生しました。
こうなると、アクセス関数を介する限り、
上で述べたような問題を回避できないですね。。。

# 実験環境はWin2K+PHP4.3.4。


PHP-users メーリングリストの案内