Heim > Artikel > Backend-Entwicklung > Objekte in PHP kopieren und klonen
* Kopieren und Klonen von Objekten
* 1. Standardmäßig werden Objekte als Referenz übergeben (eigentlich eine Kopie der Objektkennung, auf die später noch näher eingegangen wird)
* 2. Mit anderen Worten, die beiden Objektvariablen beziehen sich tatsächlich auf dasselbe Objekt
* 3. Wenn Sie ein neues Objekt erstellen möchten, müssen Sie das Schlüsselwort clone verwenden, um das aktuelle Objekt zu klonen
* 4 .Wenn bei Verwendung des Schlüsselworts clone __clone() in der Klasse vorhanden ist, wird diese automatisch aufgerufen
* 5. Die Methode __clone() wird für das neu erstellte Objekt
* 6.__clone( )-Methode kann steuern, was wir kopieren und welche Grundoperationen beim Klonen ausgeführt werden sollenclass 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; } }//Instanziieren Sie die Mitgliedsklasse Member und erstellen Sie das Mitgliedsobjekt $member
$member = new Member('peter','peter@php.cn',1000);//Zugriffstest
echo $member->score;//Kopiere das Mitgliedsobjekt
$member1 = $member;//Verwende den neuen Variablennamen $member1, um die Objektinformationen zu aktualisieren
$member1->score = 2000;//Verwende den neuen Objektvariablenname $member1 für den Zugriff auf
echo $member1->score; echo '<hr>';//Verwenden Sie den ursprünglichen Objektnamen $member für den Zugriff auf
echo $member->score;* Fazit: * 1. Das Ergebnis der neuen Variablen Die Änderung spiegelt sich in der ursprünglichen Objektvariablen * 2 wider. Erklären Sie, dass diese beiden Variablen tatsächlich auf dasselbe Objekt verweisen * 3. Das heißt, das Objekt wird standardmäßig als Referenz übergeben * 4. Mit anderen Worten, der zweite Variablenname $member1 Es ist nur ein Alias der ursprünglichen Variablen und es wird kein neues Objekt erstellt * 5. Es kann verstanden werden, dass es einfach ist ein neuer Name für den Bezeichner des ursprünglichen Objekts
var_dump($member1); //对象id=1 var_dump($member); //对象id=1//Erklärung: $ member1 und $member sind zwei identische Objekte, nur mit unterschiedlichen Namen //Was sollten Sie tun, wenn Sie möchten? Ein völlig neues Objekt erstellen? Sie müssen das Schlüsselwort verwenden: clone
$member2 = clone $member;//Überprüfen wir zunächst den Score-Attributwert der Objektvariablen $member2
echo $member2->score; //目前是原始值2000//Ändern Sie den Score-Wert
$member2->score = 5000; echo '<hr>';//Überprüfen Sie die Punktzahl in $member2 noch einmal
echo $member2->score; //新值5000 echo '<hr>';//Überlegen Sie, ob sich meine Änderung auf den Bewertungsattributwert der ursprünglichen $member-Variablen auswirkt?
echo $member->score; //发现原对象的score属性值仍为2000,未发生变化//Warum ist das so? Weil wir die Klontechnologie verwendet haben, um zwei völlig unterschiedliche Objektvariablen zu erstellen //Überprüfung unten
var_dump($member); //变量id是1 var_dump($member2); //变量id是2//Die IDs dieser beiden Objektvariablen sind unterschiedlich, was darauf hinweist Es handelt sich um zwei völlig unterschiedliche Objekte//Das Folgende ist eine Aufgabe: Beim Erstellen eines neuen Mitgliedsobjekts die Punkte des Mitglieds auf Null löschen? Was ist zu tun?//Erstellen Sie einen __Klon () in der Magic-Methode der Mitgliedsklasse klonen, das geklonte neue Objekt vorverarbeiten//Erneut demonstrieren//Aktuelle Punkte anzeigen
echo $member->score;//Zum Erstellen klonen ein brandneues Objekt $member3
$member3 = clone $member;//Überprüfen Sie den Score-Wert des neuen Objekts $member3, um zu überprüfen, ob __clone() in der Klasse wirksam ist?
echo '<hr>'; echo $member3->score; //0,说明克隆魔术方法已经生效
Das obige ist der detaillierte Inhalt vonObjekte in PHP kopieren und klonen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!