Dans l'article précédent, je vous ai présenté "La définition et l'utilisation des espaces de noms en PHP (exemples détaillés)", qui présentait en détail la définition et l'utilisation des espaces de noms en PHP. Cet article continuera à vous montrer les connaissances connexes dans. PHP sur l'utilisation du mot-clé clone. J'espère que cela aidera tout le monde !
Dans notre étude précédente, il y avait de nombreux mots-clés, tels que $this
, $new
, etc. Aujourd'hui, nous allons continuer à les examiner en PHP clone est également un mot-clé relativement couramment utilisé. Avant d'apprendre le mot-clé clone, nous devons savoir que le modèle objet en PHP appelle les objets par référence, mais nous devons également créer une copie de l'objet. Le but est d'éviter d'affecter la copie de l'objet lorsque l'objet d'origine change. $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;">cloner</span></strong>
Mots-clés
clone
est le suivant : 🎜rrreee🎜Vous pouvez comprendre l'action de clonage comme la copie de la zone mémoire de l'objet. L'objet attribué est indépendant de l'objet d'origine. . Et les méthodes, propriétés et valeurs des membres entre eux sont exactement les mêmes. __clone()
dans la méthode magique PHP. <strong><span style="max-width:90%">__clone()</span></strong>
Méthode🎜🎜La méthode __clone()
en PHP ne peut pas être appelée directement. Seul clone
peut avoir __clone()
, uniquement lorsqu'un objet est cloné via le mot-clé clone, la méthode __clone() peut être appelée via l'objet cloné. __clone()
vide dans la classe avec les droits d'accès de private
(privé). code> peut atteindre l’objectif d’interdire le clonage. 🎜🎜Si vous êtes intéressé, vous pouvez cliquer sur "🎜Tutoriel vidéo PHP🎜" pour en savoir plus sur les connaissances PHP. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!