2013-09-01 1 views
0

Может ли function __construct() разрушить себя после строительства?Может ли PHP-объект разрушить конструкцию?

Как и в следующем псевдокоде, и если да, то чем, как это сделать:

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

}

+2

-1 Вы пробовали? –

+0

Может ли он разрушить себя? –

+1

1) Вы попробовали? 2) почему вам даже нужно вручную вызывать '__destruct()'? 3) ПОЧЕМУ!?!?! 4) Разве? Зачем? – PeeHaa

ответ

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) или просто установить его в нуль в некоторых случаях.

+1

Спасибо. Не имеет ли ссылки на объект с помощью 'unset'? Являются ли они другими способами удаления объекта? Я боюсь, что мои плохие навыки ООП будут задушить память, чтобы навсегда удалить все объекты, которые мне не нужны позже. –

0

При создании экземпляра нашего объекта с $ тест = новый YourObject(), это не было бы возможно больше вернуть экземпляр его в $ тест, когда вы уничтожить его сразу же ...

0

вы всегда можете использовать условие, чтобы определить, является ли получает построен объект:

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

Если уничтожить объект в конструкторе, то и может achive вашего требуй Мент, как показано ниже.

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, а функция деструктора называется и объект также уничтожается.

Смежные вопросы