https://www.php.net/manual/ja/language.oop5.cloning.php
目次
clone キーワード
インスタンス(オブジェクト)を、単純に代入式(=
)で代入すると、同じインスタンスへのアクセスになります。
インスタンスのコピーを作成したい場合、clone キーワードを使う必要があります。
シャローコピー(浅いコピー)
インスタンスは、clone キーワードを使うことでコピーを作成する事ができます。
しかし、インスタンス(A)の中に別のインスタンス(B)がある場合、インスタンスBは「代入式(=
)での代入」となります。これはシャローコピー(浅いコピー)と呼ばれ、PHP以外でも多くの言語で発生します。
「ディープコピー(深いコピー)」 と __clone() マジックメソッド
「インスタンス(A)の中にある、別のインスタンス(B)」もcopyされるよう挙動を、ディープコピー(深いコピー)と言います。
PHPでディープコピーを実装する場合、__clone() マジックメソッドを使用します。
このコラムに関連するコードはこちらになります
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/022.php