Skip to content

Instantly share code, notes, and snippets.

@ha1t
Last active December 18, 2015 21:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ha1t/5845524 to your computer and use it in GitHub Desktop.
Save ha1t/5845524 to your computer and use it in GitHub Desktop.
PHPオブジェクトにおける、シャローコピーとディープコピー
<?php
class Player extends stdClass
{
public function __clone()
{
$this->status = clone $this->status;
}
}
$player = new Player();
$status = new stdClass();
$status->level = 35;
$player->name = 'ポカパマズ';
$player->status = $status;
$player2 = clone $player;
var_dump($player->name, $player->status->level);
var_dump($player2->name, $player2->status->level);
echo PHP_EOL;
// $player の 値を変更する
$player->name = 'オルテガ';
$player->status->level = 52;
var_dump($player->name, $player->status->level);
var_dump($player2->name, $player2->status->level);
string(15) "ポカパマズ"
int(35)
string(15) "ポカパマズ"
int(35)
string(12) "オルテガ"
int(52)
string(15) "ポカパマズ"
int(35)
<?php
$player = new stdClass();
$status = new stdClass();
$status->level = 35;
$player->name = 'ポカパマズ';
$player->status = $status;
$player2 = clone $player;
var_dump($player->name, $player->status->level);
var_dump($player2->name, $player2->status->level);
echo PHP_EOL;
// $player の 値を変更する
$player->name = 'オルテガ';
$player->status->level = 52;
// オルテガだけ変えたつもりなのにポカパマズもレベル52になってしまう
var_dump($player->name, $player->status->level);
var_dump($player2->name, $player2->status->level);
string(15) "ポカパマズ"
int(35)
string(15) "ポカパマズ"
int(35)
string(12) "オルテガ"
int(52)
string(15) "ポカパマズ"
int(52)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment