这是我的代码:Demo
class myclass1 {
public $myvariable;
}
$obj1 = new myclass1;
$obj2 = $obj1;
$obj1->myvariable = 'something';
echo $obj2->myvariable; //=> something
如您所见,我已将something
初始化为第一个对象,但令人惊讶它也将应用于第二个对象。为什么呢?实际上,对于这两个类,我需要在$myvariable
中有两个不同的值,而不是相同的值。
我该怎么做?
答案 0 :(得分:5)
OOP是如何工作的。实际上,您需要知道的是传递参考。看看这个:
在您的代码中,$obj1
和$obj2
都使用相同的内存点。因此$obj1
上的任何更改都会在$obj2
上看到。要将它们彼此分开,您需要使用clone
:
$obj2 = clone $obj1;
通过克隆对象,您实际上正在复制它。所以新对象不会引用旧对象。