広告スペース(バナー)
🐘PHP レッスン
基本文法の基礎8
データ構造とオブジェクト指向7
構文の基本を深める9
関数とデータ構造の応用9
アルゴリズムとテストの基礎8
文字列・数値操作の応用8
実務で役立つ機能8
アルゴリズム練習問題10
レッスン 40 / 68

浅いコピーと深いコピーの違い

このレッスンでは、PHPにおける浅いコピーと深いコピーの違いを学び、オブジェクトを複製するときの思わぬバグを防げるようになることを目標にします。「PHP clone 使い方」で調べている方向けです。

PHPの配列は代入するだけで自動的にコピーされますが、オブジェクトは違います。オブジェクトの浅いコピー(clone)は一番外側だけを複製し、中の入れ子オブジェクトは元と共有したままです。

サンプルコードでは、$originalというPersonオブジェクトをclone $originalで複製した$shallowの入れ子部分(address->city)を書き換えると、元の$originalまで変わってしまう様子を確認しています。オブジェクトの中に別のオブジェクトを持たせている点がポイントです。

初心者がよくつまずくのが、配列とオブジェクトでコピーの挙動が根本的に異なる点です。配列は単純な代入(=)で自動的にコピーされますが、オブジェクトは=だけでは「同じものを指す別の名前」になってしまい、複製したい場合は必ずcloneを使う必要があります。

「コピーしたはずなのに、元のデータまで書き換わってしまった」というバグの典型的な原因なので注意しましょう。PHPを扱ううえで覚えておきたい重要な仕様です。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではPHPを直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
元のデータを壊さずに、安全に複製できるようになります。
広告スペース(バナー)
広告スペース(記事内)