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