我对此失去了理智。我已经将我的课程解构为基础知识并且它仍在发生。 所以这堂课:
class Insanity
{
protected $simon;
protected $garfunkel;
public function __construct()
{
$this->simon = new stdClass();
$this->garfunkel = new stdClass();
}
}
一切都很好,花花公子
如果我$this->simon->name = 'paul';
和$this->garfunkel->name = 'art';
他们都是快乐的单独变种。
直到我做$this->simon = $this->garfunkel;
从这一点开始,它们会被链接/引用或者其他,所以当我$simon->name = 'homer';
时,它就成了两者的名字。
即使我$this->simon->whatTheF = 'uck';
,$garfunkel
也会以该属性结束,尽管快速var_dump()
声称这两个变量仍然是单独的(按名称)。
有人知道为什么吗?
答案 0 :(得分:2)
$simon
和$garfunkel
不包含对象本身。它们只是对象的引用。你也可以称它们为指针。如果您执行$simon = $garfunkel
,则只需复制此引用,因此$simon
将指向与$garfunkel
完全相同的对象。
如果您想复制对象本身,PHP会为您提供clone
关键字:
$simon = clone $garfunkel;