【PHP】objectは参照型
以下のようなコードを書いていた際に問題が起きた。
<?php $hoge = new stdClass(); $hoge->a = 1; $fuga = $hoge; $fuga->a = 2; print_r($hoge);
$hoge->a
は1
だと思っていたのに、出力は以下のようになった。
stdClass Object ( [a] => 2 )
なぜ?
リファレンスにちゃんと書いてあった...
オブジェクトが引数として渡されたり返り値となったり あるいは別の変数に代入されたりした場合、 それはエイリアスではありません。ID のコピーを保持し、 同じオブジェクトを指すようになるのです。
PHP: オブジェクトと参照 - Manual
というわけなので、代入せずにcloneしよう。
<?php $hoge = new stdClass(); $hoge->a = 1; $fuga = clone $hoge; $fuga->a = 2; print_r($hoge);
stdClass Object ( [a] => 1 )
知らなかった...