在PHP中, “=” 作为赋值符号,对于一般变量是深拷贝,对于对象来说是浅拷贝(对象的赋值是援用赋值)。
对象作为参数传递时,也是援用传递,无论函数定义时参数后面是否有&符号。
概念:
深拷贝:赋值时值齐全复制,齐全的copy,对其中一个作出扭转,不会影响另一个
浅拷贝:赋值时,援用赋值,相当于取了一个别名。对其中一个批改,会影响另一个
实际
PHP中, “=” 赋值时,一般对象是深拷贝,然而对象来说,是浅拷贝。也就是说,对象的赋值是援用赋值。(对象作为参数传递时,也是援用传递,无论函数定义时参数后面是否有&符号)
<?php class A { public $aa = 100; } $a1 = new A(); $a2 = $a1; $a1->aa = 200; echo $a2->aa; // 输入200 echo PHP_EOL;
要是想实现值的复制,php提供了clone函数来实现复制对象。
例如:
<?php class A { public $aa = 100; } $a1 = new A(); // 应用clone 实现复制对象 $a2 = clone $a1; $a1->aa = 200; echo $a2->aa; // 输入100 echo PHP_EOL;