Heim > Backend-Entwicklung > PHP-Tutorial > Objekte in PHP kopieren und klonen

Objekte in PHP kopieren und klonen

无忌哥哥
Freigeben: 2023-04-01 21:20:02
Original
2464 Leute haben es durchsucht

* 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 sollen

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;
    }
    
}
Nach dem Login kopieren

//Instanziieren Sie die Mitgliedsklasse Member und erstellen Sie das Mitgliedsobjekt $member

$member = new Member('peter','peter@php.cn',1000);
Nach dem Login kopieren

//Zugriffstest

echo $member->score;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

//Kopiere das Mitgliedsobjekt

$member1 = $member;
Nach dem Login kopieren

//Verwende den neuen Variablennamen $member1, um die Objektinformationen zu aktualisieren

$member1->score = 2000;
Nach dem Login kopieren

//Verwende den neuen Objektvariablenname $member1 für den Zugriff auf

echo $member1->score;
echo &#39;<hr>&#39;;
Nach dem Login kopieren

//Verwenden Sie den ursprünglichen Objektnamen $member für den Zugriff auf

echo $member->score;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

* 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
Nach dem Login kopieren

//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;
Nach dem Login kopieren

//Überprüfen wir zunächst den Score-Attributwert der Objektvariablen $member2

echo $member2->score; //目前是原始值2000
Nach dem Login kopieren

//Ändern Sie den Score-Wert

$member2->score = 5000;
echo &#39;<hr>&#39;;
Nach dem Login kopieren

//Überprüfen Sie die Punktzahl in $member2 noch einmal

echo $member2->score; //新值5000
echo &#39;<hr>&#39;;
Nach dem Login kopieren

//Überlegen Sie, ob sich meine Änderung auf den Bewertungsattributwert der ursprünglichen $member-Variablen auswirkt?

echo $member->score; //发现原对象的score属性值仍为2000,未发生变化
Nach dem Login kopieren

//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
Nach dem Login kopieren

//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;
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

//Zum Erstellen klonen ein brandneues Objekt $member3

$member3 = clone $member;
Nach dem Login kopieren

//Überprüfen Sie den Score-Wert des neuen Objekts $member3, um zu überprüfen, ob __clone() in der Klasse wirksam ist?

echo &#39;<hr>&#39;;
echo $member3->score; //0,说明克隆魔术方法已经生效
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage