php对象的浅拷贝与深拷贝

一、概述

php4时php的对象复制采用深拷贝,php5后php的对象复制采用深拷贝。话不多说,看下面一段代码。

二、Show you a code

class MyClass {
    public $var = 1;
}
$obj1 = new MyClass();
$obj2 = $obj1;
$obj2->var = 2;
print $obj1->var;

1.这段代码做了什么

首先new一个MyClass类的对象obj1,然后将obj1复制给$obj2,将obj2对象的var属性变为2,最后输出obj1的var属性值。

2.输出是什么

  • 在php4中,输出结果为1。
  • 在php5中,输出结果为2。

三、简单粗暴地理解深拷贝和浅拷贝

  • 浅拷贝:复制时指向同一块内存,在其中一方有变更时,其他指向该内存的实体也会受影响。
  • 深拷贝:复制时开辟一块新内存,并将原内存中的数据复制过去。其中一方变更时,不影响其他实体。

四、php5中复制时如何使用浅拷贝

将复制那行代码作如下更改:

$obj2 = clone $obj1;

发表评论

电子邮件地址不会被公开。 必填项已用*标注