# オブジェクトのコピーと複製
# * 1. デフォルトでは、オブジェクトは参照によって渡されます (実際にはオブジェクト識別子のコピー。これについては後ほど詳しく説明します)# * 2. つまり、2 つのオブジェクト変数は実際には同じオブジェクトを参照します
#* * 3. 新しいオブジェクトを作成する場合は、clone キーワードを使用して現在のオブジェクトのクローンを作成する必要があります * 4 . clone キーワードを使用する場合、クラス内に __clone() があれば、自動的に呼び出されます# * 5. __clone() メソッドは、新しく作成されたオブジェクト上で実行されます
* 6.__clone() メソッドは、コピーする内容とクローン作成時に完了する基本操作を制御できます。
class Member { //声明三个私有属性 private $name; //会员名 private $email; //会员邮箱 private $score; //会员积分 //构造方法 public function __construct($name='',$email='',$score=0) { $this->name = $name; $this->email = $email; $this->score = $score; } //查询器(暂时省略访问控制) public function __get($name) { return $this->$name; } //设置器(暂时省略访问控制) public function __set($name,$value) { $this->$name = $value; } //克隆魔术方法在对象克隆时自动调用,针对新对象进行初始化操作 public function __clone() { $this->score = 0; } }
//メンバー クラス Member をインスタンス化し、メンバー オブジェクト $member
$member = new Member('peter','peter@php.cn',1000);
を作成します。 //アクセステスト
echo $member->score;
//メンバーオブジェクトをコピーします
$member1 = $member;
//新しい変数名$member1を使用してオブジェクト情報を更新します
$member1->score = 2000;
//新しい変数名を使用しますオブジェクト変数名 $member1 にアクセス
echo $member1->score; echo '<hr>';
//元のオブジェクト名 $member を使用して
echo $member->score;
にアクセス * 結論:
* 1. 新しい変数の結果変更は元のオブジェクト変数
* 2 に反映されます。これら 2 つの変数が実際に同じオブジェクトを指していることを説明します
* 3。つまり、オブジェクトはデフォルトで参照によって渡されます
* 4. つまり、2番目の変数名 $member1 は、元の変数のエイリアスに過ぎず、新しいオブジェクトは作成されません。
# * 5. 単にであることが理解できます。元のオブジェクトの識別子の新しい名前var_dump($member1); //对象id=1 var_dump($member); //对象id=1//説明$ member1 と $member は名前が異なるだけで、2 つの同一のオブジェクトです//次の場合はどうすればよいですか新しいオブジェクトを完全に作成するには、次のキーワードを使用する必要があります: clone
$member2 = clone $member;//まずオブジェクト変数のスコア属性値を確認しましょう $member2
echo $member2->score; //目前是原始值2000//スコア値を変更します
$member2->score = 5000; echo '<hr>';//$member2 のスコアをもう一度確認してください
echo $member2->score; //新值5000 echo '<hr>';//よく考えてください、私の変更は元の $member 変数のスコア属性値に影響を与えるでしょうか?
echo $member->score; //发现原对象的score属性值仍为2000,未发生变化//これはなぜですか? クローン技術を使用して 2 つのまったく異なるオブジェクト変数を作成したためです。//以下の検証
var_dump($member); //变量id是1 var_dump($member2); //变量id是2//これら 2 つのオブジェクト変数の ID が異なることを示しています。これらは 2 つの完全に異なるオブジェクトです//次のタスクを実行します: 新しいメンバー オブジェクトを作成するとき、メンバーのポイントをゼロにクリアします。
#//作成する必要がありますか? Member クラス Magic メソッドの __clone() クローン。クローンされた新しいオブジェクトを前処理します。
//もう一度デモンストレーションします
//現在のポイントを表示します
echo $member->score;
//Clone新しいオブジェクトを作成します $member3
$member3 = clone $member;
//新しいオブジェクト $member3 のスコア値をチェックして、クラス内の __clone() が有効かどうかを確認します?
echo '<hr>'; echo $member3->score; //0,说明克隆魔术方法已经生效
以上がPHPでのオブジェクトのコピーとクローン作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。