【发布时间】:2016-11-25 08:43:08
【问题描述】:
我怀疑 PHP 对象在某些情况下被删除后的行为,并进行了一些测试。成为代码:
class ItemRecord
{
private $id;
protected $name;
public function __contruct($pID, $pName)
{
$this->id = $pID;
$this->name = $pName;
}
public function setName($pName)
{
$this->name = $pName;
}
public function getName()
{
return $this->name;
}
}
我创建了一些 ItemRecord 类的对象,然后将它们附加到对象列表(一个数组):
$objList = array();
$obj1 = new ItemRecord("1", "Object 1");
$objList[] = $obj1;
$obj2 = new ItemRecord("2", "Object 2");
$objList[] = $obj2;
如果我更改“原始”对象中的某些属性,例如:
$obj1->setName("FOO");
然后我会尝试用原始对象显示列表中“链接”元素的内容:
echo($objList[0]->getName()); //-> Of course, It displays "FOO"
因此,如果我删除该对象,列表中将不再存在
unset($obj1); unset($obj2);
但事实并非如此!
echo($objList[0]->getName());
它继续显示“FOO”!,并且对象继续存在...
所以我的问题是:在这种情况下,当你删除一个对象时,删除时会发生复制操作?
还有其他类似这种奇怪行为的奇怪案例,但现在我会
更新:在 cmets 中讨论了答案和事情之后。 如果 unset() 函数可以返回删除的结果可能会很棒。例如:'true',如果最终可以删除 var 内容或对象。
【问题讨论】:
标签: php performance oop