浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

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

 子の実体もコピーするディープコピーをしたい時はままあります。例えば、リレーションのついた 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);// 別の値をディープコピー
  • この記事いいね! (0)