【PHP】ディープコピー用ライブラリ DeepCopy の紹介

  • 2020年11月2日
  • PHP

 オブジェクトが連なったオブジェクトをコピーすると次の画像の様にオブジェクトの参照が起き、問題を引き起こしやすいです。あるオブジェクトの子のオブジェクトに変更をかけるともう片方のオブジェクトにも変更がかかる、というのは慣れないと間違いやすく、参照でなく実体をコピーしなければならないのは少々手間です(完全なコピーには各プロパティを再帰的に見ていく必要があり、マジックメソッドなど言語に精通する必要があります)。

 子の実体もコピーするディープコピーをしたい時はままあります。例えば、リレーションのついた ORM(Object-relational mapping)モデル(データベース中のテーブルを表現するモデル)を複製したい時などです。DeepCopy はそんな場合、簡単にディープコピーを実現します。
myclabs/DeepCopy: Create deep copies (clones) of your objects

use function DeepCopy\deep_copy;

$copy = deep_copy($var);// $var のディープコピー結果 $copy を得る

 フレームワーク等、シングルトンを使えるのであれば次の様にコピー処理を実行するインスタンスを呼び出して使いまわすとリソースの節約になります。

use DeepCopy\DeepCopy;

$copier = new DeepCopy(true);

$copy   = $copier->copy($var);// 関数の時と同様にディープコピー
$copy_2 = $copier->copy($var_2);// 別の値をディープコピー
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG