克隆对象和普通对象之间的区别

时间:2014-07-16 07:56:45

标签: php oop loops object clone

在PHP中,当我在变量中创建克隆对象时,它与使用具有相同类的变量创建的新对象有何不同

例如

 $a = new classA();

 $b = clone $a;

 $c = new classA();

$b$c之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

您应该查看以下示例

<?php

class classA {
    public $x=0;  
}


$a = new classA();
$a->x = 20;

echo $a->x."<br />";

$b = clone $a;

$a->x = 30;

echo $a->x."<br />";

echo $b->x."<br />"; // 20 because x was 20 before cloning $a to $b

$a->x = 50;

echo $a->x."<br />"; // changed to 50

echo $b->x."<br />"; // stil 20, $a 


$c = new classA();

echo $c->x;

使用克隆make,对象x中的属性$b与对象$a中的属性相同,因为克隆简单副本对象。在创建新对象时,您将拥有新的对象和属性值将为0。

克隆是简单的复制对象,因为默认情况下对象为:

$a = $b;

PHP不会复制(就简单类型而言),但会指向内存中的确切位置。

因此,对于您使用的简单类型:

$a = 5;
$b = $a;

如果要复制,但对于需要使用clone的对象:

$a = new classA();
$a->x = 20;
$b = clone $a;

具有相同的效果。

您应该在Object and referencesCloning查看手册以了解这些内容。