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

来源:10-1 [php]原型模式

qq_不善丶真言_0

2015-03-27 21:09

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

 
写回答 关注

3回答

  • KingZero00
    2016-08-02 16:00:01

    并不会,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对象造成影响。

    KingZe...

    忘了在第11行代码下面输入 echo $cat->name."\n";, 结果会是'Cat',不信你可以试一下

    2016-08-02 16:02:58

    共 1 条回复 >

  • _自娱自乐__
    2015-11-04 17:25:38

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

  • 秋叶焚茶
    2015-04-24 11:12:18

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

    qq_陌_3...

    并不会呀,克隆的对象中的变量的地址已经和原型类重的不一样了。

    2019-05-14 22:23:26

    共 1 条回复 >

大话PHP设计模式

帮助PHPer具备使用设计模式解决工程中复杂逻辑的能力

62160 学习 · 230 问题

查看课程

相似问题