はじめに
オブジェクトをクローンして値を書き換えようとしたら、どうも上手くクローン出来ず、元のオブジェクトの情報も書き換わって変だな〜と思って調べたらcloneと値渡しをごっちゃにしていたのでメモ
## シャローコピー
PHPマニュアルによると、この書き方では両方とも同じIDを保持するため、同じオブジェクトとして扱われる模様。
<?php
class CloneTest {
public $property_val;
}
$origin_obj = new Test;
$clone_obj = $origin_obj;
$origin_obj->property_val = 123; //456
$clone_obj->property_val = 456; //456
ディープコピー
オブジェクトのcloneを生成したいしたい場合は、clone $a
と書く必要があるそうです。
<?php
class CloneTest {
public $property_val;
}
$origin_obj = new Test;
$clone_obj = clone $origin_obj;
$origin_obj->property_val = 123; //123
$clone_obj->property_val = 456; //456