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

今回は『PHPのコピーオンライトについて』のPart3になります。
part1の際に書いた『※例外あり。part2以降で詳しく書きます』について書きます。

================
<COWの罠①>
配列同士の代入前に特殊なことをすると『特定の要素だけ参照状態』になります

——–
【サンプル:コード①】
$a = array(1, 2, 3);
$c = &$a[1];
$b = $a;
$b[1] = 0;
——–

この処理を実行すると、$aや$cが変更されている訳ではないのに『変数$aの2番目の要素($a[1])は0になっている』のです。
これはPHPの内部処理の都合上、『$a[1]=$c=$b[1]と参照し合っている状態』になるためです。

——–
【サンプル:コード②】
$a = array(1, 2, 3);
$b = $a;
$c = &$a[1];
$b[1] = 0;
——–

上記の処理の場合、3行目で『$a[1]が$cから参照された状態に”変更”された』となり、COWが発生します。
要するに、$aと$bは別物(参照されていない)状態になります。

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

以上、『Part3:COWの罠②』でした。
Part4へ続きます。