Maison  >  Article  >  développement back-end  >  L'utilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)

L'utilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)

WBOY
WBOYoriginal
2021-10-25 16:33:573193parcourir

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 !

L'utilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)

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.&#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);
?>

输出结果:

Lutilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)

其中我们需要注意的是,如果使用=将一个对象赋值给一个变量,那么这时得到的将是一个对象的引用,通过这个变量更改属性的值将会影响原来的对象。所以还是得用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();
?>

输出结果:

Lutilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)

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

A ce moment, si vous utilisez le mot-clé new, vous pouvez recréer l'objet, puis attribuer la même valeur à l'attribut, qui peut également jouer le rôle de création d'une nouvelle copie. La méthode est non seulement gênante mais aussi sujette aux erreurs. Nous espérons simplement que PHP pourra avoir un objet identique et que les deux n'interféreront pas l'un avec l'autre, ce que nous considérons comme un clone. Comment y parvenir ? Pas de panique, continuez à surveiller.

<strong><span style="font-size: 20px;">cloner</span></strong> Mots-clés

Nous espérons avoir une copie qui n'interfère pas avec l'objet d'origine. En PHP, nous pouvons cloner l'objet via le mot-clé clone. 🎜🎜Le format de syntaxe du mot-clé 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.
🎜🎜Ensuite, examinons les capacités du clonage à travers un exemple simple. L'exemple est le suivant : 🎜rrreee🎜Résultat de sortie :
🎜🎜Lutilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)🎜🎜Ce à quoi nous devons faire attention, c'est que si vous utilisez = pour attribuer un objet à une variable, alors ce que vous obtiendrez à ce moment sera une référence à un objet. Changer la valeur de l'attribut via cette variable affectera l'objet d'origine. Vous devez donc toujours utiliser clone, la modification de la valeur de l'attribut n'affectera pas l'objet d'origine. 🎜🎜Grâce aux exemples ci-dessus, nous savons déjà comment cloner un objet pour notre usage. Cependant, une fois l'objet cloné avec succès, ses attributs, méthodes membres et valeurs sont exactement les mêmes que l'objet d'origine. le temps, nous disons simplement que la modification des attributs n'affectera pas l'objet d'origine, mais comment devrions-nous réaffecter les attributs des membres de la copie clonée ? Pour le moment, nous utiliserons la méthode __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é.
🎜🎜À ce stade, lorsque vous utilisez clone pour créer une copie, vous devez faire attention si __clone() existe. 🎜🎜S'il n'existe pas, PHP attribuera tous les attributs de l'objet par défaut ; si __clone() existe, c'est-à-dire qu'il a été défini, alors il sera également responsable des attributs du nouvel objet. 🎜🎜Regardons cela à travers un exemple. L'exemple est le suivant : 🎜rrreee🎜Résultat de sortie :
🎜🎜Lutilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)🎜🎜De l'exemple ci-dessus, on peut voir que la méthode __clone() ne nécessite aucun paramètre. Une autre chose que nous pouvons savoir est que si vous souhaitez désactiver le clonage, il vous suffit de définir un __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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn