为了账号安全,请及时绑定邮箱和手机立即绑定

clone方法,是不是两个对象指向一个引用

比如说有两个对象都是同一个原型clone出来的,如果修改了一个对象的值,另一个会不会受到影响,应该会吧。。。

 

正在回答

5 回答

并不会,clone出来的对象已经是另一个对象了,就比如我执行下面的代码

class Animal{
	public $name = "Cat";
}
$cat = new Animal();
echo $cat->name."\n";

$dog = clone $cat;
echo $dog->name."\n";

$dog->name = "Dog";
echo $dog->name."\n";

var_dump($dog);
var_dump($cat);

然后在运行的结果如下:

Cat
Cat
Dog
object(Animal)#2 (1) {
  ["name"]=>
  string(3) "Dog"
}
object(Animal)#1 (1) {
  ["name"]=>
  string(3) "Cat"
}
[Finished in 0.3s]

注意,我var_dump出来的两个对象的#后面的id值是不同的,也就是说这是两个不同的对象,那么改变了Dog对象的name值也不会对Cat对象造成影响。

1 回复 有任何疑惑可以回复我~
#1

KingZero00

忘了在第11行代码下面输入 echo $cat->name."\n";, 结果会是'Cat',不信你可以试一下
2016-08-02 回复 有任何疑惑可以回复我~

PHP的clone是浅复制,克隆的新对象只是源对象的引用

0 回复 有任何疑惑可以回复我~

一样的疑惑,如果是指针的话,我也觉得会

0 回复 有任何疑惑可以回复我~
#1

qq_陌_37

并不会呀,克隆的对象中的变量的地址已经和原型类重的不一样了。
2019-05-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

clone方法,是不是两个对象指向一个引用

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信