ディープコピーとシャローコピー

24時間365日戦える営業マンを作りあげます。ホームページコンサルタント山田直毅(なおたか)です。


PHP4とPHP5の違いを調査している時にあまり耳にしない言葉があったのでメモ。
ディープコピー…参照先のインスタンスを複製
シャローコピー…参照先を示すアドレスをコピー

<?
$object = new Hoge();
$copy   = $object;
$object->setHoge('hoge');
echo $copy->getHoge();

こんな風にソースを記述すると挙動が異なってしまう。


PHP4はオブジェクトを変数に代入した際にディープコピーが行われていたのに対し、PHP5ではシャローコピーが行われる。PHP5でディープコピーを行う場合は__cloneメソッドで明示的に複製を作り出さなければいけない。オブジェクトの代入を頻繁に記述しているソースコードをPHP4からPHP5へ移行するのは骨が折れそうだが…。


PHP4と5ではパーサエンジンが異なる。ZendEngine1からZendEngine2に変わっているのだが、パラメータ:zend.ze1_compatibiliy_modeをOnにすることでPHP4互換モード、つまりでZendEngine1で動作するという切り札がある。セキュリティを強化する為にPHP5化することになったこともあり、この選択肢を切り出していいものやら…。