__clone()、オブジェクトのコピーが完了すると呼び出されます
ほとんどの場合、プロパティを取得するためにオブジェクトを完全にコピーする必要はありません。ただし、これが本当に必要となるケースが 1 つあります。それは、ウィンドウ関連のリソースを保持する GTK ウィンドウ オブジェクトがある場合です。元のウィンドウと同じプロパティをすべて保持したまま新しいウィンドウをコピーしたい場合がありますが、それは新しいオブジェクトである必要があります (新しいオブジェクトでない場合、一方のウィンドウでの変更がもう一方のウィンドウに影響するため)。
別の状況もあります。オブジェクト A がオブジェクト B への参照を保存している場合、オブジェクト A をコピーするときに、そこで使用されるオブジェクトをオブジェクト B ではなく B のコピーにしたい場合は、次のようにする必要があります。オブジェクト A のコピーを取得します。
関数:
オブジェクトのコピーは、clone キーワードを使用して実行できます (これにより、可能であればオブジェクトの __clone() メソッドが呼び出されます)。オブジェクト内の __clone() メソッドを直接呼び出すことはできません。
構文:
$copy_of_object = clone $object;
注意:
オブジェクトがコピーされると、PHP 5 は浅いコピーを実行します。すべての参照プロパティは、引き続き元の変数への参照になります。
コピーが完了すると、__clone() メソッドが定義されている場合、新しく作成されたオブジェクト (コピーによって生成されたオブジェクト) の __clone() メソッドが呼び出され、属性 (必要な場合)。
コードを見てください:
<?php class Person { public $sex; public $name; public $age; public function __construct($name="", $age=25, $sex='男') { $this->name = $name; $this->age = $age; $this->sex = $sex; } public function __clone() { echo __METHOD__."你正在克隆对象<br>"; } } $person = new Person('小明'); // 初始赋值 $person2 = clone $person; var_dump('persion1:'); var_dump($person); echo '<br>'; var_dump('persion2:'); var_dump($person2);
結果を見てください:
Person::__clone你正在克隆对象 string(9) "persion1:" object(Person)#1 (3) { ["sex"]=> string(3) "男" ["name"]=> string(6) "小明" ["age"]=> int(25) } string(9) "persion2:" object(Person)#2 (3) { ["sex"]=> string(3) "男" ["name"]=> string(6) "小明" ["age"]=> int(25) }
クローン作成は成功しました。
以上がPHPの__clone()メソッドの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。