LoginSignup
10
7

More than 3 years have passed since last update.

PHPでシャローコピーとディープコピーの違いをうまく理解出来ていなかった話

Last updated at Posted at 2019-01-29

はじめに

オブジェクトをクローンして値を書き換えようとしたら、どうも上手くクローン出来ず、元のオブジェクトの情報も書き換わって変だな〜と思って調べたら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
10
7
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7