• Grey Facebook Icon
  • Grey Twitter Icon
​株式会社エイト/東京都渋谷区 / 大阪 /  福岡

© 2018 Eight inc.

PHPのコピーオンライトについて Part3

最終更新: 2019年4月10日


今回は『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へ続きます。