PHPでオブジェクトのコピーを作成する方法【cloneキーワードの使い方を解説】
PHPでオブジェクトのコピーを作成するには、cloneキーワードを使用します。PHPでは、オブジェクトを「=」で単純に代入すると、オブジェクトそのものではなく参照(リファレンス)が渡されるだけです。そのため、元のオブジェクトとは完全に独立した複製を作りたい場合には、cloneを使う必要があります。
基本例:cloneでオブジェクトを複製する
<?php
class Demo {
public $val1;
public $val2;
}
$ob = new Demo();
$copyOb = clone $ob;
$ob->val1 = "Jack";
$ob->val2 = "Kevin";
$copyOb->val1 = "Tom";
$copyOb->val2 = "Ryan";
echo "$ob->val1 $ob->val2\n";
echo "$copyOb->val1 $copyOb->val2\n";
?>
出力結果
Jack Kevin Tom Ryan
この例では、cloneによって作成したコピー先のオブジェクトに別の値を代入しています。出力結果を見ると、元のオブジェクト($ob)とクローン($copyOb)はそれぞれ独立しており、片方の変更がもう片方に影響していないことがわかります。
コンストラクタを持つクラスのクローン例
次に、コンストラクタで初期化を行うクラスのオブジェクトをcloneで複製する例を見てみましょう。
<?php
class Demo {
public $deptname;
public $deptzone;
public function __construct($a, $b) {
$this->deptname = $a;
$this->deptzone = $b;
}
}
$val = new Demo('Finance', 'West');
$copy = clone $val;
print_r($val);
print_r($copy);
?>
出力結果
Demo Object
(
[deptname] => Finance
[deptzone] => West
)
Demo Object
(
[deptname] => Finance
[deptzone] => West
)
このように、cloneを実行すると、コンストラクタの処理を再実行することなく、既存のオブジェクトと同じ状態を持つ新しいインスタンスが生成されます。
補足:__clone()マジックメソッドについて
cloneキーワードでオブジェクトを複製する際、クラス内に__clone()メソッドが定義されている場合は、クローン作成の直後に自動的に呼び出されます。このメソッドを活用すれば、複製時のプロパティの再初期化や、特別な処理の追加などが可能です。
また注意点として、cloneによるコピーはシャローコピー(浅いコピー)です。プロパティが他のオブジェクトへの参照や配列を保持している場合、それらの中身までは深く複製されません。ネストされたオブジェクトごと完全にコピーしたい場合(ディープコピー)は、__clone()メソッド内で個別にcloneを実行するなどの対応が必要になります。
-
JavaScriptでURLオブジェクトを作成する方法をわかりやすく解説
JavaScriptでは、標準組み込みのURLコンストラクタを使うことで、URL文字列からURLオブジェクトを簡単に生成できます。URLオブジェクトを作成すると、プロトコル(protocol)やホスト名(host)、パス(pathname)など、URLを構成する各要素に個別にアクセスできるようになるため、URLの解析や操作がとても便利になります。 URLオブジェクトの作成例 以下は、JavaScriptでURLオブジェクトを作成し、ボタンをクリックするとその各プロパティを画面に表示するサンプルコードです。 <!DOCTYPE html> <html lang="
-
JavaScriptで多次元オブジェクトを作成する方法【サンプルコード付き】
はじめに JavaScriptでは、オブジェクトのプロパティの値として別のオブジェクトを持たせることで、多次元(ネストされた)オブジェクトを作成できます。この構造を活用すると、氏名や学校情報、住所のように階層関係のあるデータを、直感的かつ整理された形で表現することが可能です。 サンプルコード 以下は、多次元JavaScriptオブジェクトを作成し、コンソールに表示するためのコード例です。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /