克隆不适合我吗?

Gau*_*rav 2 php clone

我有一个$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;
Run Code Online (Sandbox Code Playgroud)

输出是

obj1->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 10, obj2->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 20, obj2->myVar->myAnotherVar: 20
Run Code Online (Sandbox Code Playgroud)

Ric*_*ams 9

你在实施这个__clone()方法吗?关于克隆PHP文档中的示例将比我可能更好地解释这一点.特别是你对这部分感兴趣,

克隆对象时,PHP 5将执行所有对象属性的浅表副本.任何引用其他变量的属性都将保留引用.

克隆完成后,如果定义了__clone()方法,则将调用新创建的对象的__clone()方法,以允许任何需要更改的必要属性.

更新
根据您对问题的更新,您确实错过了实施__clone().由于$myVar成员myObject本身就是一个对象,你也需要克隆它.这是你的myObject课应该是什么样子,

class myObject {
    public $myVar = false;
    function __construct() {
        $this->myVar = new myAnotherObject();
    }

    function __clone() {
        $this->myVar = clone $this->myVar;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出然后变成以下,

obj1->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 10, obj2->myVar->myAnotherVar: 10
obj1->myVar->myAnotherVar: 10, obj2->myVar->myAnotherVar: 20
Run Code Online (Sandbox Code Playgroud)