最近値下げの話ばかり書いていますが、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が故障した場合)はご連絡ください。
以上