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!
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.','. $this -> study2.'<br>'; } } $obj = new father('好好学习', '天天向上'); $obj2 = clone $obj;//克隆$obj $obj -> output(); $obj2 -> output(); echo '<pre class="brush:php;toolbar:false">'; var_dump($obj); var_dump($obj2); ?>
输出结果:
其中我们需要注意的是,如果使用=将一个对象赋值给一个变量,那么这时得到的将是一个对象的引用,通过这个变量更改属性的值将会影响原来的对象。所以还是得用clone,更改属性值不会影响到原来的对象。
通过上述实例,我们已经知道应该如何去克隆一个对象来为我们所用了,但是对象克隆成功后,他的属性、成员方法以及值都是和原对象一模一样完全相同的,那这时候我们光说更改属性不会影响到原来的对象,但是应该怎样去给克隆后的副本成员属性重新赋值呢?这时候我们就要用到PHP魔术方法中的__clone()
方法。
<strong><span style="max-width:90%">__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.','.$this -> url.'<br>'; } public function __clone(){//通过__clone()来更改新对象的属性 $this -> name = '福如东海'; $this -> url = '寿比南山'; } } $obj = new father('好好学习', '天天向上'); $obj2 = clone $obj; $obj -> output(); $obj2 -> output(); ?>
输出结果:
由上述实例,可以看出__clone() 方法不需要任何参数。其中我们还有一点可以知道的就是,想要禁止克隆的话,只需要在类中设置一个空的,访问权限为 private
(私有的)的 __clone()
<strong><span style="font-size: 20px;">Klonen</span></strong>
Schlüsselwörter
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. __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. __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!