PHPではインスタンスは参照だから

かなり初心者的な記事ですが…そうんなですよ。
生成したインスタンスを他のインスタンスに代入しても、
参照なので、代入先のインスタンスを変えると
代入元もかわるんですよ…
class HogeHoge(){

private $value;

setAAA($value){
$this->value = $value;
}
getAAA{
return $this->value;
}
}

class Syori(){
$a = new HogeHoge()
$a->set(1234);
$b = $a
$b->setAAA('b')
print($a->getAAA());
print($b->getAAA());
}

この場合どちらも'b'が出力されます。
というかされるはず…(実行させてないから(ーー;))

で、2年くらい前にJavaをしてた時の記憶だと、
生成したインスタンスをSessionに格納すると、参照でなくなっていた記憶があったため、
今回のPHPの開発でもそうだろうと思っていたのがいけなかった…

$test = new HogeHoge();
$test->setAAA('DBからの値');
$testをバックアップとしてセッションへ($backupとでもしときます。)
画面表示
サブミット
$test->setAAA('入力値');
$backupをセッションから取得。

if($backup->getAAA() == $test->getAAA()){
update;
}else{
insert;
}

見たいに、取得時のあたいと書き変えられているかで判定してのに、
常に「$backup->getAAA() == $test->getAAA()」となるわけですよ。
こりゃもう、Sessionに入れようが参照で渡されている事は間違いないので、
clone $testをSessionに入れるようにしたらOKでした。

colne $testをすることで、値の格納された$testとは参照値の異なるが
格納している情報は待ったく同じもの、判りやすく言えば
私たちの普通に納得するコピーが行えます。

どこでは参照で、どこでは参照でなくなるのか…
そういったとこちゃんと意識しないと怖いですよ〜