新しいオブジェクトの参照が元のオブジェクトのものではなく、独自のメソッドやプロパティを指すように、複数の参照を含む複雑なPHPオブジェクトのクローンを作成する最良の方法は何ですか?PHP - 自身への参照を含むオブジェクトをクローンしますか?
from the manual私は、$new_object = clone $old_object;
が参照を保持する浅いコピーを作成することを理解しています。おそらく$ new_objectの参照は古いオブジェクトのメソッドを指していますか?
このマニュアルページのコメントからは、$new_object = unserialize(serialize($old_object));
がディープコピーを作成する方法であることが示されています。このアプローチが私の場合に何を意味するのかは確かではありません。つまり、参照がクローンを指すように変換されているのか、絶対に作られているのか、それとも何か他のものに変換されているのかどうかはわかりません。
これを行う標準的な方法が確立しているかどうかを知りたいと思います。
(注:問題のオブジェクトはDrupal Viewsオブジェクトですが、この問題は一般的にPHPオブジェクトに関するものです。このオブジェクトの唯一の重要な機能は、巨大であり、 。あなたはツリー全体をナビゲートしようとした場合)
クール、ありがとうございます。これが良い一般化可能で標準的なアプローチであるかどうかについてのあらゆる考え方。オブジェクトが巨大なときにパフォーマンスの欠点がある場合は?私のテストでは大丈夫だと思われますが、テストは非常に基本的です。 – user568458
オブジェクトのサイズが大きくなるほど処理速度が遅くなりますが、そのようになります。あなたのオブジェクトの大きさに依存していると思います。シリアル化されたバージョンは、メモリの半分以上を占めています(strlen()はどれくらい大きいかを教えてくれます)。悪いですが、それ以外の場合、実行時間は些細なものでなければなりません。 – Cal
ですから、メモリは単純に== strlen(serialize($ object))を使用してください - それは意味があり、私の質問に答えます。ありがとう! – user568458