newと参照と私

最近値下げの話ばかり書いていますが、XBOXが値下げされるような雰囲気を察知しました。
XBOX意外と面白そうなんだよな。故障率高いですが。

newと参照は曲者です。昔はまったのでメモ。


<?php

class RefObj {
    var $val;

    function RefObj($val) {
        $this->val = $val;
    }

    function out() {
        echo $this->val . "\n";
    }
}

$data = new RefObj("aaa");
$data_ref =& $data;             // (1)

$data = new RefObj("bbb");   // (2)
$data_ref->out();                // (3)

$data =& new RefObj("ccc"); // (4)
$data_ref->out();               // (5)

?>

上記の結果は


bbb
bbb

(1)で$data_refには$dataの参照を保持することになります。
(2)で$dataに新しいRefObjを代入していますが、これでは$dataの参照領域みたいなものは変わらない。つまり、$dataの中身(値)が変わるだけで入れ物は変わらない。ということで、$data_refは値が変わった$dataを指しています。したがって(3)でbbb。
(4)で今度はnewの参照先を代入しています。ここでは$dataの参照領域が変更され、つまり入れ物自体が変わるわけで、そんなことを知らない$data_refは前の入れ物を見ています。したがって(5)はbbb。

まあ、上記の説明が正しいかどうかはともかく、結果はbbbとbbbになる。
説明がおかしい場合(およびXBOXが故障した場合)はご連絡ください。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: PHP, コンシューマーゲーム パーマリンク

コメントを残す

メールアドレスが公開されることはありません。