删除对象并创建新对象

时间:2011-06-08 10:02:27

标签: php

我有一个指向对象的指针,我想要释放它,然后创建一个新对象。 我尝试了什么:

$this->myObject = null;
$this->myObject = new myObject($newVar);

这应该有用吗?我做错了吗? 我尝试手动调用__destructor()但是触发了“未知函数”错误。

5 个答案:

答案 0 :(得分:4)

PHP没有指针。

但是,是的,这很好。您也不需要设置为null;原始的,现在悬挂的对象将像任何其他对象一样被垃圾收集。

Example:

<?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);