我有一个 $objDummy
类的对象 ClassDummy
,另一个是$objClone = clone $objDummy;
然后我对 $objClone
进行了任何更改,$objDummy
也更改了。
我不想那样做。
我怎样才能让它发挥作用?
编辑:
作为对克里斯的回应。
这是一个例子
<?php
class myAnotherObject{
public $myAnotherVar =10;
}
class myObject {
public $myVar = false;
function __construct() {
$this->myVar = new myAnotherObject();
}
}
$nl = "\n";
//*
$nl = '<br />';
//*/
$obj1 = new myObject();
echo 'obj1->myVar->myAnotherVar: '.$obj1->myVar->myAnotherVar;
$obj2 = clone $obj1;
echo $nl.'obj1->myVar->myAnotherVar: '.$obj1->myVar->myAnotherVar.', obj2->myVar->myAnotherVar: '.$obj2->myVar->myAnotherVar;
$obj2->myVar->myAnotherVar = 20;
echo $nl.'obj1->myVar->myAnotherVar: '.$obj1->myVar->myAnotherVar.', obj2->myVar->myAnotherVar: '.$obj2->myVar->myAnotherVar;
输出是
obj1->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 10, obj2->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 20, obj2->myVar->myAnotherVar: 20
最佳答案
您是否正在实现 __clone()
方法? PHP documentation on cloning 中的示例将比我能更好地解释这一点。特别是你对这部分感兴趣,
更新
根据您对问题的更新,您确实缺少 __clone()
的实现。由于 $myVar
的 myObject
成员本身就是一个对象,因此您也需要对其进行克隆。这是你的 myObject
类应该是什么样子,
class myObject {
public $myVar = false;
function __construct() {
$this->myVar = new myAnotherObject();
}
function __clone() {
$this->myVar = clone $this->myVar;
}
}
输出然后变成以下,
obj1->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 10, obj2->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 10, obj2->myVar->myAnotherVar: 20