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

Objekte in PHP kopieren und klonen

无忌哥哥
无忌哥哥Original
2018-06-28 15:35:092449Durchsuche

* 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;
    }
    
}

//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 &#39;<hr>&#39;;

//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 &#39;<hr>&#39;;

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

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

//Ü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 &#39;<hr>&#39;;
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!

Stellungnahme:
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