为什么类上的更改会影响其他类?

时间:2017-01-04 14:11:31

标签: php oop

这是我的代码:Demo

class myclass1 {
    public $myvariable;
}

$obj1 = new myclass1;
$obj2 = $obj1;

$obj1->myvariable = 'something';
echo $obj2->myvariable; //=> something

如您所见,我已将something初始化为第一个对象,但令人惊讶它也将应用于第二个对象。为什么呢?实际上,对于这两个类,我需要在$myvariable中有两个不同的值,而不是相同的值。

我该怎么做?

1 个答案:

答案 0 :(得分:5)

OOP是如何工作的。实际上,您需要知道的是传递参考。看看这个:

enter image description here

在您的代码中,$obj1$obj2都使用相同的内存点。因此$obj1上的任何更改都会在$obj2上看到。要将它们彼此分开,您需要使用clone

$obj2 = clone $obj1;

通过克隆对象,您实际上正在复制它。所以新对象不会引用旧对象。