ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクト指向オブジェクト クローン作成メソッド

PHP オブジェクト指向オブジェクト クローン作成メソッド

巴扎黑
巴扎黑オリジナル
2017-04-17 14:38:581824ブラウズ

渡し渡し参照を使用してオブジェクトを呼び出す場合、実際の呼び出しは同じオブジェクトである場合があることは、元のオブジェクトを変更するときに影響を与えたくない場合があることを以前から知っていました。 PHP では、現在のオブジェクトに従ってこれを実行し、複製されたコピーは元の 2 つのオブジェクトから完全に独立しており、相互に干渉しません。

クローンの使用方法を確認するために簡単な例を見てみましょう:

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
protected $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;                               //将实例化的类再克隆出来一个
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();

上記の例の結果はすべて「Yasuo ミッドレーナーをプレイしたい」です。

クローンコピーはオリジナルから独立しており、互いに干渉しないと上で述べましたが、これはどういう意味ですか?

これは上記と同じ例ですが、少しだけ変更されています。

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
public $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;
$character2->location = &#39;上单&#39;;
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();

上記の例の結果は、「ヤスオ ミッド レーンでプレイしたい」と「ヤスオ トップ レーンでプレイしたい」です。

この例から、クローンされたコピーと元の 2 つのオブジェクトは完全に独立しており、互いに干渉しないことがわかります。

__clone の使用法

多くの場合、オブジェクトのクローンを作成するだけでなく、オブジェクトに独自のプロパティとメソッドを持たせたいと考えます。次に、クラス内に __clone メソッドを作成する必要があります。このメソッドは、直接呼び出されないという点でコンストラクターやデストラクターに似ています。

例として上記の例を見てみましょう:

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
public $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function __clone(){
$this -> location = &#39;上单&#39;;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();

__clone メソッドの優れた特徴は、デフォルトの動作を使用してコピーを作成した後に呼び出すことができるため、この段階では変更したいコンテンツのみを呼び出すことができることです。変えられる。

__clone メソッドに追加される最も一般的な機能は、参照として扱われるクラス属性が正しくコピーされるようにすることです。オブジェクトへの参照を含むクラスのクローンを作成する場合は、オブジェクトへの 2 番目の参照ではなく、オブジェクトの 2 番目のコピーを取得する必要がある場合があります。そのため、そのコードを __clone メソッドに追加します。

以上がPHP オブジェクト指向オブジェクト クローン作成メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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