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

ISIGE, Akira xia @ silvia.com
2004年 2月 3日 (火) 11:27:07 JST


いしげ です.

On 2004/02/03 11:05:54 JST,
T.Okabe <okabe @ nsd.jip.co.jp> wrote:

> >僕は$aが$bを指していると考えていたので
> >「おかしな動作だ」と思っていました。
> リファレンスがファイルシステムの「ハードリンク」のような
> ものであると考えると、ポインタとは違うわけですね。

何だか収束しそうですが,ちょっと腑に落ちない点があるので……


function getVal() は & なしで宣言されているのだし,
$Val =& $ObjTest->getVal() としたところで,
$Val は getVal() が返した「$ObjTest->Val の値のコピー」と連結するだけで,
$ObjTest->Val とは無関係,となるのが,
言語仕様からみて正しいと思うのですが……
これで $Val と $ObjTest->Val が結合できてしまうのなら,
function 宣言時の & が無意味になってしまうし.

また,仮にそこで function &getVal() として宣言していたとしても,
$ObjTestCopy = $ObjTest と(=& でなく = で)コピーした時点で,
$ObjTest->Val や $Val のふたつ(同じリファレンス)とは異なる
別の $ObjTestCopy->Val が作成されてくれるのが,
言語仕様として正しい気がします.

もっとも,このどちらの場合も,マニュアルには詳しい動作が書いておりません.
& 指定なしの返り値を =& で結合しようとした時の動作も,
オブジェクトの暗黙コピーの際にリファレンスがどうなるのかも.

「リファレンスに関してこういう仕様なんだ」と言われればそれまでですが……
この辺りの挙動について,どこかの文書で定義されているのか,
単に「決まってないから不定」なのか,ご存知の方がいたら教えてください.


--
ISIGE, Akira



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