読み込みが終了しない場合は、しばらく待つか、リロードを行なってください。
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; } }