ずっと実体渡しだと思いこんでた。 無駄な&がいっぱいあるわ・・・
<?php class a{ public $a; } function b($A){ $A->a = "piyo"; } $A = new a; $A->a = "hoge"; print_r($A); b($A); print_r($A);
a Object ( [a] => hoge ) a Object ( [a] => piyo )
<?php class a{ public $a; } function b($A){ $A->a = "piyo"; } $A = new a; $A->a = "hoge"; print_r($A); $B = $A; b($B); print_r($A);
a Object ( [a] => hoge ) a Object ( [a] => piyo )
意図としては 実体コピーして、コピーをいじってもオリジナルはへーき というつもりのコード。
しかしオブジェクトのコピーは発生しない(参照)ので、オリジナルが書き換えられる。 これ地味にやばい誤解してたな。