読み込みが終了しない場合は、しばらく待つか、リロードを行なってください。
If loading does not finish, wait for a while or reload.
エンジニア向けの情報を発信するブログです。
どなたでも発信できます。
お好きに利用していただれば幸いです。

$a = 1; $b = $a; $b = 2; var_dump($a); var_dump($b);

class Dog
{
public $name;
public $category;
}
$dog = new Dog();
$dog->name = 'ビギエン';
$dog->category = '柴犬';
$dog2 = $dog;// 👈 コピーしたつもり
$dog2->name = 'ドットコム';
$dog2->category = 'プードル';
var_dump($dog);
var_dump($dog2);

clone
<?php
class Dog
{
public $name;
public $category;
/**
* @var Owner
*/
public $owner;// 👈 不穏なプロパティあるけど一旦無視
}
class Owner// 👈 不穏なクラスあるけど一旦無視
{
public $name;
public $gender;
}
$dog = new Dog();
$dog->name = 'ビギエン';
$dog->category = 'しば犬';
$dog2 = clone $dog;// 👈 クローン
$dog2->name = 'ドットコム';
$dog2->category = 'チワワ';
var_dump($dog);
var_dump($dog2);

<?php
class Dog
{
public $name;
public $category;
/**
*
* @var Owner
*/
public $owner;// 👈 オプジェクトをセットするプロパティ
}
/**
* 飼い主クラス
*/
class Owner// 👈 こいつのオブジェクトをDogクラスのownerプロパティにセットする
{
public $name;
public $gender;
}
$owner = new Owner();// 👈 飼い主オブジェクトを生成
$owner->name = '中の人';
$owner->gender = '男';
$dog = new Dog();
$dog->name = 'ビギエン';
$dog->category = 'しば犬';
$dog->owner = $owner;// 👈 オブジェクトをセット
$dog2 = clone $dog;// 👈 クローン
$dog2->name = 'ドットコム';
$dog2->category = 'チワワ';
$owner2 = $dog2->owner;// 👈 飼い主クラスをコピーから取得
$owner2->name = 'モヒカン';
$owner2->gender = '女';
$dog2->owner = $owner2;// 👈 コピー先にオブジェクトをセット
var_dump($dog);
var_dump($dog2);

<?php
class Dog
{
public $name;
public $category;
/**
*
* @var Owner
*/
public $owner;
// 👇 以下を追加
public function __clone()
{
$this->owner = clone $this->owner;
}
}
/**
* 飼い主クラス
*/
class Owner
{
public $name;
public $gender;
}
$owner = new Owner();
$owner->name = '中の人';
$owner->gender = '男';
$dog = new Dog();
$dog->name = 'ビギエン';
$dog->category = 'しば犬';
$dog->owner = $owner;
$dog2 = clone $dog;
$dog2->name = 'ドットコム';
$dog2->category = 'チワワ';
$owner2 = $dog2->owner;
$owner2->name = 'モヒカン';
$owner2->gender = '女';
$dog2->owner = $owner2;
var_dump($dog);
var_dump($dog2);
// 👇 以下を追加
public function __clone()
{
$this->owner = clone $this->owner;
}

class MyCloneable
{
public $object1;
public $object2;
function __clone()
{
// this->object のコピーを作成します。こうしないと、
// 同じオブジェクトを指すことになってしまいます。
$this->object1 = clone $this->object1;
}
}
<?php
class Dog
{
public $name;
public $category;
/**
*
* @var Owner
*/
public $owner;
public function __clone()
{
$this->owner = clone $this->owner;
}
}
/**
* 飼い主クラス
*/
class Owner
{
public $name;
public $gender;
/**
* 親
*
* @var OwnerParent
*/
public $ownerParent;// 👈 飼い主の親クラスのオブジェクトをセット
}
/**
* 飼い主の親クラス
*/
class OwnerParent// 👈 飼い主の親クラスを追加
{
public $name;
public $gender;
}
$owner = new Owner();
$owner->name = '中の人';
$owner->gender = '男';
// 👇 飼い主の親オブジェクトを飼い主にセット
$ownerParent = new OwnerParent();
$ownerParent->name = '松ノ信吾郎';
$ownerParent->gender = '男';
$owner->ownerParent = $ownerParent;
$dog = new Dog();
$dog->name = 'ビギエン';
$dog->category = 'しば犬';
$dog->owner = $owner;
$dog2 = clone $dog;
$dog2->name = 'ドットコム';
$dog2->category = 'チワワ';
$owner2 = $dog2->owner;
$owner2->name = 'モヒカン';
$owner2->gender = '女';
// 👇 飼い主の親をコピー先から取得してコネってセット
$owner2Parent = $owner2->ownerParent;
$owner2Parent->name = 'お茶がもっぱら好きでねぇ';
$owner2Parent->gender = 'お茶';
$owner2->ownerParent = $owner2Parent;
$dog2->owner = $owner2;
var_dump($dog);
var_dump($dog2);

/**
* 飼い主クラス
*/
class Owner
{
public $name;
public $gender;
/**
* 親
*
* @var OwnerParent
*/
public $ownerParent;
// 👇 こいつが必要ということ
public function __clone()
{
$this->ownerParent = clone $this->ownerParent;
}
}
