在PHP中,当我在变量中创建克隆对象时,它与使用具有相同类的变量创建的新对象有何不同
例如
$a = new classA();
$b = clone $a;
$c = new classA();
$b
和$c
之间的区别是什么?
答案 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 references和Cloning查看手册以了解这些内容。