初めまして・お久しぶり、こんにちは。
システム開発事業部の荒島です。

今回は『PHPのコピーオンライトについて』のPart2になります。

================
<オブジェクト同士の代入>
下記のサンプルをご覧ください。
——–
【サンプル:コード】
$a = new stdClass();
$b = $a;
$a->foo = ‘bar’;
$b->foo = ‘foo’;

【サンプル:説明】
■1~2行目
変数同士のときと変わらないので割愛
■3行目
①変数$aのプロパティfooに、データとして’bar’を格納
■4行目
①変数$bのプロパティfooに、データとして’foo’を格納

——–

なんと、4行目後も『変数$bは編す$aを参照している状態』になります。
具体的に言うと、『変数$aも変数$bも、プロパティfooには’foo’が格納されている』のです!

理由は、「コピー元・コピー先のどちらも変更されていないため」です。
変更されたのは、あくまでも「$aのプロパティfoo」のため、COWは実行されません。

もし、参照ではなく『データを複製する』場合は、代入ではなくcloneを使用しましょう。
——–
$a = new stdClass();
$b = clone($a);
$a->foo = ‘bar’;
$b->foo = ‘foo’;
// $a->fooは’bar’のまま
——–

上記で『そう言うことね(←わかってない)』となった方は、今は取り敢えず頭の片隅に入れておくだけで大丈夫です。
オブジェクトを使うようになった際に「COWあたりで問題があったような?」と思い出して頂ければ幸いです。

================

以上、『Part2:オブジェクト同士の代入』でした。
Part3へ続きます。