ホームページ >バックエンド開発 >PHPの問題 >phpのクローン方法とは何ですか?

phpのクローン方法とは何ですか?

藏色散人
藏色散人オリジナル
2020-10-14 16:40:313718ブラウズ

php clone メソッドは、PHP オブジェクトのクローン作成を指します。整数 $a を変数 $b に代入すると、$b は $a の「コピー」になりますが、この 2 つは関連しません。 b の値は $a に影響を与えず、$a の値の変更は $b に影響を与えません。

phpのクローン方法とは何ですか?

推奨: 「PHP ビデオ チュートリアル

PHP オブジェクトの複製: __clone() メソッド

オブジェクトのクローン作成: __clone() メソッド

整数 $a を変数 $b に代入すると、$b は $a の「コピー」になりますが、2 番目の 2 つは$b の値を変更しても $a には影響せず、$a の値を変更しても $b には影響しません。同じことが配列にも当てはまりますが、オブジェクトでは異なります。オブジェクト インスタンス $a が変数 $b に割り当てられるとき、$b は $a の「コピー」ではなく、$a への参照です。値の変更は、 $a に影響し、$a の値の変更は $b にも影響します。

例:

<?php
class Cat{
public  $name;
function __construct($name){
echo &#39;Cat类启动&#39;;
$this->name = $name;
}
function __destruct(){
echo &#39;Cat类结束&#39;;
}
}
$a = new Cat("默默");//实例化类,调用无参数的构造方法
//$c被销毁时自动调用析构方法
$b=$a;
echo "改变之前:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
$a->name="琳琳";
echo "改变之后:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
?>

実行結果:

Cat クラスの変更が開始される前:

a->名前: モモ

b->名前: モモ

変更後:

a->名前: リンリン

b->name: Linlin

しかし、多くの場合、オブジェクトへの参照だけでなく、オブジェクトのコピーが必要になります。現時点では clone キーワードを使用できますが、「cloned」クラス属性に参照がある場合、その参照は保持されることに注意してください。つまり、コピー内の参照と元のクラス内の参照の両方が保持されます。同じメモリを指します。 .

例:

<?php
class Cat{
public $name;
function __construct($name){
echo &#39;Cat类启动&#39;;
$this->name = $name;
}
function __destruct(){
echo &#39;Cat类结束&#39;;
}
}
$a = new Cat("默默");//实例化类,调用无参数的构造方法
//$c被销毁时自动调用析构方法
$b=clone $a;
echo "改变之前:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
$a->name="琳琳";
echo "改变之后:<br>";
echo "a->name:".$a->name."<br>";
echo "b->name:".$b->name."<br>";
?>

実行結果:

Cat クラスは前に変更を開始します:

a->name:黙って

b->名前: モモ

変更後:

a->名前: リンリン

b->名前: モモ

Cat クラスの終了 Cat クラスの終了

このクラスの属性 $name には参照が与えられているため、clone キーワードを使用してコピーすると、「コピー」内の名前と $name 「元の」では同じ変数を指します

以上がphpのクローン方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。