Heim >Backend-Entwicklung >PHP-Tutorial >Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)

Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)

WBOY
WBOYOriginal
2021-10-25 16:33:573198Durchsuche

Im vorherigen Artikel habe ich Ihnen „Die Definition und Verwendung von Namespaces in PHP (detaillierte Beispiele)“ vorgestellt, in dem die Definition und Verwendung von Namespaces in PHP ausführlich vorgestellt wurde. In diesem Artikel werden Ihnen weiterhin verwandte Kenntnisse angezeigt PHP über die Verwendung des Schlüsselworts clone. Hoffe, es hilft allen!

Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)

In unserer vorherigen Studie gab es viele Schlüsselwörter wie $this, $new usw. Heute werden wir uns weiterhin mit der Verwendung von PHP befassen clone ist ebenfalls ein relativ häufig verwendetes Schlüsselwort. Bevor wir das Schlüsselwort clone lernen, müssen wir wissen, dass das Objektmodell in PHP Objekte als Referenz aufruft, aber wir müssen auch eine Kopie des Objekts erstellen. Der Zweck besteht darin, eine Beeinträchtigung der Objektkopie zu vermeiden.
$this$new之类的,今天我们继续来看一下在PHP中也算比较常用到的关键字clone克隆关键字。在学习克隆关键字之前,我们需要知道PHP中的对象模型是通过引用来调用对象的,但是又是偶需要建议一个对象的副本,目的就是想再原有对象改变的时候能够不影响到对象副本。

这时候如果使用new关键字是可以重新创建对象,然后再给属性赋上相同的值,也是可以起到新建副本的作用,但是这种方法不仅麻烦而且容易出错,这时候就希望PHP能有一个完全一样的对象,而且这两个还不是互相干扰的,也就是我们想的克隆。那应该怎样去实现呢?不慌,接着看。

<strong><span style="font-size: 20px;">clone</span></strong>关键字

我们希望有一个能够和原本对象互不干扰的副本,在PHP中通过clone关键字就可以实现克隆对象了。

clone关键字的语法格式如下:

克隆对象名称 = clone 原对象名称;

你可以把克隆这个动作理解为,把对象的内存区域进行复制,赋值后的对象与原对象之间是相互独立的。并且他们之间的成员方法、属性和值都是完全相同的。

接下来我们通过一个简单的实例来看一下clone的能力吧,示例如下:

<?php
    class father{
        public $study1, $study2;
        public function __construct($study1, $study2){
            $this -> study1 = $study1;
            $this -> study2 = $study2;
        }
        public function output(){
            echo $this -> study1.&#39;,&#39;. $this -> study2.&#39;<br>&#39;;
        }
    }
    $obj  = new father(&#39;好好学习&#39;, &#39;天天向上&#39;);
    $obj2 = clone $obj;//克隆$obj
    $obj  -> output();
    $obj2 -> output();
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    var_dump($obj);
    var_dump($obj2);
?>

输出结果:

Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)

其中我们需要注意的是,如果使用=将一个对象赋值给一个变量,那么这时得到的将是一个对象的引用,通过这个变量更改属性的值将会影响原来的对象。所以还是得用clone,更改属性值不会影响到原来的对象。

通过上述实例,我们已经知道应该如何去克隆一个对象来为我们所用了,但是对象克隆成功后,他的属性、成员方法以及值都是和原对象一模一样完全相同的,那这时候我们光说更改属性不会影响到原来的对象,但是应该怎样去给克隆后的副本成员属性重新赋值呢?这时候我们就要用到PHP魔术方法中的__clone()方法。

<strong><span style="font-size: 20px;">__clone()</span></strong>方法

PHP中__clone()方法是不能够直接调用的,有clone才有__clone(),只有通过clone关键字克隆了一个对象的时候,才能够通过这个克隆出来的对象来调用__clone()方法。

这时候再用到clone创建副本的时候,就需要注意了,PHP会检查__clone()是否存在。

要是不存在的话,PHP会默认赋值对象的全部属性;如果__clone()存在,也就是定义过了,那么也就会负责了新对象的属性。

加下来我们通过一个实例来看一下,实例如下:

<?php
    class father{
        public $name, $url;
        public function __construct($name, $url){
            $this -> name = $name;
            $this -> url  = $url;
        }
        public function output(){
            echo $this -> name.&#39;,&#39;.$this -> url.&#39;<br>&#39;;
        }
        public function __clone(){//通过__clone()来更改新对象的属性
            $this -> name = &#39;福如东海&#39;;
            $this -> url  = &#39;寿比南山&#39;;
        }
    }
    $obj  = new father(&#39;好好学习&#39;, &#39;天天向上&#39;);
    $obj2 = clone $obj;
    $obj  -> output();
    $obj2 -> output();
?>

输出结果:

Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)

由上述实例,可以看出__clone() 方法不需要任何参数。其中我们还有一点可以知道的就是,想要禁止克隆的话,只需要在类中设置一个空的,访问权限为 private(私有的)的 __clone()

Wenn Sie zu diesem Zeitpunkt das Schlüsselwort new verwenden, können Sie das Objekt neu erstellen und dann dem Attribut denselben Wert zuweisen, was jedoch auch die Rolle der Erstellung einer neuen Kopie spielen kann Die Methode ist nicht nur problematisch, sondern auch fehleranfällig. Wir hoffen nur, dass PHP ein identisches Objekt haben kann und die beiden sich nicht gegenseitig stören, was wir als Klon bezeichnen. Wie soll dies erreicht werden? Keine Panik, beobachten Sie weiter.

<strong><span style="font-size: 20px;">Klonen</span></strong> Schlüsselwörter

Wir hoffen, eine Kopie zu haben, die das Originalobjekt nicht beeinträchtigt. In PHP können wir das Objekt über das Schlüsselwort clone klonen. 🎜🎜Das Syntaxformat des Schlüsselworts clone lautet wie folgt: 🎜rrreee🎜Sie können die Klonaktion als Kopieren des Speicherbereichs des Objekts verstehen. Das zugewiesene Objekt ist unabhängig vom Originalobjekt. . Und die Mitgliedsmethoden, Eigenschaften und Werte zwischen ihnen sind genau gleich.
🎜🎜Als nächstes werfen wir einen Blick auf die Funktionen des Klonens anhand eines einfachen Beispiels. Das Beispiel sieht wie folgt aus: 🎜rrreee🎜Ausgabeergebnis:
🎜🎜Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)🎜🎜Was wir beachten müssen, ist, dass Sie = zum Zuweisen verwenden Wenn Sie ein Objekt in eine Variable umwandeln, erhalten Sie zu diesem Zeitpunkt einen Verweis auf ein Objekt. Wenn Sie den Wert des Attributs über diese Variable ändern, wirkt sich dies auf das ursprüngliche Objekt aus. Sie müssen also immer noch den Klon verwenden. Das Ändern des Attributwerts hat keine Auswirkungen auf das Originalobjekt. 🎜🎜Anhand der obigen Beispiele wissen wir bereits, wie man ein Objekt für unsere Verwendung klont. Nach dem erfolgreichen Klonen des Objekts sind seine Attribute, Mitgliedsmethoden und Werte jedoch genau die gleichen wie beim Originalobjekt Zeit, wir sagen nur, dass sich geänderte Attribute nicht auf das Originalobjekt auswirken, aber wie sollten wir die Attribute der geklonten Kopiemitglieder neu zuweisen? Zu diesem Zeitpunkt verwenden wir die Methode __clone() in der PHP-Magic-Methode.
🎜🎜<strong><span style="max-width:90%">__clone()</span></strong>Methode🎜🎜Die Methode __clone() in PHP kann nicht direkt aufgerufen werden. Nur clone kann haben __clone(): Nur wenn ein Objekt über das Schlüsselwort clone geklont wird, kann die Methode __clone() über das geklonte Objekt aufgerufen werden.
🎜🎜Wenn Sie zu diesem Zeitpunkt eine Kopie mit clone erstellen, müssen Sie darauf achten, ob __clone() vorhanden ist. 🎜🎜Wenn es nicht existiert, weist PHP standardmäßig alle Attribute des Objekts zu; wenn __clone() existiert, das heißt, es wurde definiert, dann ist es auch für die Attribute des neuen Objekts verantwortlich. 🎜🎜Schauen wir uns das anhand eines Beispiels an. Das Beispiel sieht wie folgt aus: 🎜rrreee🎜Ausgabeergebnis:
🎜🎜Die Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)🎜🎜Aus dem obigen Beispiel ist ersichtlich, dass die Methode __clone() keine Parameter erfordert. Eine andere Sache, die wir wissen können, ist, dass Sie, wenn Sie das Klonen deaktivieren möchten, nur einen leeren __clone() in der Klasse mit den Zugriffsrechten private (privat) festlegen müssen. Die Methode code> kann den Zweck erreichen, das Klonen zu verhindern. 🎜🎜Bei Interesse können Sie auf „🎜PHP-Video-Tutorial🎜“ klicken, um mehr über PHP-Kenntnisse zu erfahren. 🎜

Das obige ist der detaillierte Inhalt vonDie Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele). 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