[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как правильно делать __detruct()
qpayct
как правильно делать __destruct? я до сих пор делал, как увидел когда то у кого то и не задавался вопросом, а работает ли это вообще и нужно ли оно?

class cls {

public $shit;

function __construct() {
$this->shit = "Hello my dear shitty friend";
}
//
fucntion print_shit() {
echo $this->shit;
}
//
function __destruct() {
unset($this);
};




Спустя 5 часов, 58 минут, 39 секунд (21.06.2010 - 07:19) Kuzya написал(а):
unset($this);

Зачем вот это? Деструктор итак вызывается при уничтожении объекта. То есть после того как он отработает, объект итак будет уничтожен. Так что такой unset тут бесполезен

Спустя 12 минут, 19 секунд (21.06.2010 - 07:32) qpayct написал(а):
интересно откуда такие сведения и как это проверить?

Спустя 1 час, 20 минут, 59 секунд (21.06.2010 - 08:53) Michael написал(а):
Рассматривай деструктор __destruct как функцию которая выполнится перед физическим уничтожением объекта.
Например в конструкторе ты открыл файл, в деструкторе его закрой.
Где то считаешь в глобальной переменной общее число каких то объектов и в конструкторе инкрементируешь - в деструкторе декрементируй. В таком плане.

Цитата
Почитать

- в колисниченко

Спустя 2 часа, 39 минут, 44 секунды (21.06.2010 - 11:32) Ice написал(а):
Цитата (qpayct @ 21.06.2010 - 08:32)
интересно откуда такие сведения и как это проверить?


class User {
public $login = 'Ice';
public function __construct() {
print 'Создан класс ' .__CLASS__.'<br />';
}

public function getLogin() {
return $this->login.'<br />';
}
public function __destruct() {
print '<br />Класс '.__CLASS__.' уничтожен';
}
}


$test = new User;
print $test->getLogin();
unset( $test );
print @gettype( $test );

Изучая это, помните, что деструктор вызывается всегда при уничтожении объекта и если деструктор не вызван явно, то он вызывается автоматически, как и конструктор.
Убедиться в автоматическом вызове деструктора можно, удалив предпоследнюю строку листинга, но следует иметь ввиду, что в этом случае деструктор будет объявлен в самом конце.

Спустя 4 минуты, 20 секунд (21.06.2010 - 11:37) gzim9x написал(а):
чуть-чуть изменим... smile.gif
<?php

class
cls {

public $shit;

function __construct() {
$this->shit = "Hello my dear shitty friend";
}

//
function print_shit() {
unset($this);
echo $this->shit;
}

//
function __destruct() {
unset($this);
}

}


$a=new cls();
$a->print_shit();
?>

Вывод:
Hello my dear shitty friend

unset($this) в описании класса не отрабатывает вообще!
http://www.sitepoint.com/forums/showthread.php?p=3224196
The reason PHP does not support unset($this) is a restriction in the Zend engine and not because of a policy.

то есть unset($this) не только бесполезен -- но его там вообще не должно быть.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.