我有一个指向对象的指针,我想要释放它,然后创建一个新对象。 我尝试了什么:
$this->myObject = null;
$this->myObject = new myObject($newVar);
这应该有用吗?我做错了吗?
我尝试手动调用__destructor()
但是触发了“未知函数”错误。
答案 0 :(得分:4)
PHP没有指针。
但是,是的,这很好。您也不需要设置为null
;原始的,现在悬挂的对象将像任何其他对象一样被垃圾收集。
<?php
class A {
public function __construct() {
echo "*A";
}
public function __destruct() {
echo "~A";
}
}
$o = new A;
$o = new A;
// Output: *A*A~A~A
?>
答案 1 :(得分:2)
据我所知,没有必要删除,取消设置或取消该属性。如果旧对象在其他任何地方未被引用,则分配新对象时将会消失:
<?php
class Foo{
public $id, $bar;
public function __construct($id){
$this->id = $id;
}
}
$a = new Foo(1);
$a->bar = new Foo(2);
$a->bar = new Foo(3);
// No trace of Foo(2)
var_dump(get_defined_vars());
与此比较:
class Foo{
public $id, $bar;
public function __construct($id){
$this->id = $id;
}
}
$a = new Foo(1);
$a->bar = new Foo(2);
$b = $a->bar;
$a->bar = new Foo(3);
// Foo(2) remains because it's still referenced by $b
var_dump(get_defined_vars());
答案 2 :(得分:0)
unset($this->myObject); $this->myObject = new Object($newVar);
应该做的。
答案 3 :(得分:0)
首先:PHP不知道任何指针,只有引用;)
毕竟你的解决方案应该有效。您使用$this->myObject
覆盖null
的引用。如果没有对象的引用,则对象将被销毁。您可以省略第一步,因为只需覆盖($this->myObject = new myObject($newVar);
)就足够了。
请注意:如果有其他对该对象的引用,它将不会立即被删除,但是完全时间对象被销毁是你应该永远不会无论如何要小心。垃圾收集器做得很好:))
答案 4 :(得分:0)
为了获得你想要的东西,我认为你必须通过引用传递,而不是直接传递,否则变量b存储当时那里的值。尝试: $ a = new Foo(1); $ a-&gt; bar = new Foo(2); $ b =&amp; $ a-&gt; bar; $ a-&gt; bar = new Foo(3);