0
我对PHP对象在某些情况下被删除之后的行为表示怀疑,做了一些测试。是代码: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”!和对象继续使用现有,以及...
所以我的问题是:在这种情况下,当你删除一个对象,复制操作发生在删除时间?
还有其他好奇的情况下,像这种奇怪的行为,但现在我会
更新:的答案,之后的事情已经在注释中谈到。如果unset()函数可能返回删除结果,那么它可能会很好。例如:'true',如果var内容或对象可以最终删除。
所以,当释放的内存进行复位($对象)? – MikeBau
没有。取消设置将删除对该$对象的引用。 – user3091574
所以答案是:**对象(内容)不会被删除,直到所有的引用被删除?** – MikeBau