PHP对象可以在构造上破坏自身吗?

时间:2013-09-01 18:31:09

标签: php oop constructor destructor

施工后function __construct()可以自毁吗?

与下面的伪代码类似,如果是,则执行此操作:

function __construct() {
  if($something) echo "OK!"
  else __destruct();

}

4 个答案:

答案 0 :(得分:4)

方法__destruct是PHP中的一种神奇方法,不能手动调用。

Hovewer它没有做任何真正的魔术,方法的名称应该类似onDestructed左右,就像事件监听器一样。

因此,当没有对该对象的引用时,将调用__destruct。方法的实现可以如下:

function __destruct(){
  echo "An object of class " . __CLASS__ . " has been destroyed " ;
}

要回答你的问题,是的,它可以被显式调用,你只需执行方法__destruct中的代码,但你不会销毁该对象(除非你在其中做一些真正的垃圾收集)

function __construct($something) {
  if($something) 
    echo "OK!" ;
  else 
    $this->__destruct(); // $this-> must be used here!
}

要销毁它,您可以使用unset($object)或在某些情况下将其设置为null。

答案 1 :(得分:0)

如果使用$ test = new YourObject()创建Object的实例,那么当你立即破坏它时,就不可能将它的实例返回到$ test中......

答案 2 :(得分:0)

您始终可以使用条件来确定对象是否构造完成:

   if($something) {
   $object = new Class();
   }

答案 3 :(得分:0)

如果你在构造函数中销毁对象,那么你可以像下面那样实现你的需求。

class class1
{
    function __construct()
    {
        print "constructor\n";
        print "Now destructor going to call\n";
        unset($this);
    }
    function __destruct()
    {
        print "this is destructor\n";
    }
}
$obj=new class1;

在上面的例子中。 在创建对象时,它将调用构造函数然后构造函数 函数通过unset函数销毁自己然后析构函数调用和 对象也被破坏了。