11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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
11
8
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
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?