在 PHP 里面,复制一个对象,其实就是去引用一个对象,如果你改变了复制的对象里的属性,原来被复制的对象也会改变。也就是这两个对象引用的其实是一个东西,改变了其中的一个,另一个也会跟着改变。
如果想真正的去复制一个对象,我们可以使用克隆,这样两个对象会是完全不同的东西,相互没有任何的影响。下面我们可以通过几个演示来理解一下复制和克隆对象。
先去创建一个 Track 对象的实例 ... 叫它 magic ... 再去设置一下这个对象的 track_name 属性的值。
$magic = new Track();
$magic->track_name = 'Magic';
下面,我们可以去复制一份这个 magic 对象 ... 叫做 magic_mix ..
$magic_mix = $magic;
再把这两个对象使用 print_r 输出到屏幕上 ...
print_r($magic);
print_r($magic_mix);
你会看到这们的 track_name 这个属性的值都是 Magic 这个字符串 ... 下面,我们可以再去修改一下 ... 回到 index.php ... 去改一下复制的这个 $magic_mix 这个对象的 track_name 属性的值 ... 改成 Magic Mix
$magic_mix->track_name = 'Magic Mix';
保存 ... 回到浏览器 ... 现在 ... magic 还有 magic_mix 这两个对象里的 track_name 这个属性的值 ... 都会是Magic Mix .... 因为这两个对象指向的是同一个东西 ... 所以,我们使用 magic_mix 这个对象改变了 track_name 的值 ... 另外那个 magic 对象也会受到影响 ...
想要它们互不相干的话 ... 可以使用克隆 ...
使用 clone 这个关键词 ... 去克隆一个 magic 对象 ... 然后把这个克隆之后的对象交给 magic_mix ...
在下面,还是修改一下 magic_mix 里的 track_name ...
再回到浏览器 ....
这回你会发现 ... magic 对象里面的 track_name ,还有 magic_mix 这个对象里面的 track_name 是不同的值。