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 написал(а):
чуть-чуть изменим...
Вывод:
unset($this) в описании класса не отрабатывает вообще!
http://www.sitepoint.com/forums/showthread.php?p=3224196
то есть unset($this) не только бесполезен -- но его там вообще не должно быть.
<?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) не только бесполезен -- но его там вообще не должно быть.