乐趣区

关于php:php浅拷贝和深拷贝

在 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;
退出移动版