Чёт не могу чётко уяснить, будут потери памяти в PHP 5.2 при использовании конструкций вида:
class a {
private $_t = null;
public function __construct() {
$this->_t = $this;
}
public function __destruct() {
unset($this->_t);
}
}
?
Спасибо.
Спустя 8 минут, 24 секунды (27.01.2012 - 13:41) Игорь_Vasinsky написал(а):
непонял... создал, сразу удалил... что здесь может утечь....
Спустя 6 минут, 59 секунд (27.01.2012 - 13:48) Гость_гость написал(а):
Да, но тут циклическая ссылка типа. Есть сомнение, что деструктор сработает после выполнения скрипта. То есть объект будет висеть в памяти "вечно", даже если вроде на него нет больше ссылок. "Вечно" имеется в виду будет уничтожен только после завершения работы скрипта.
Спустя 32 секунды (27.01.2012 - 13:48) Гость_гость написал(а):
Хотя, что париться, щас проверю.
Спустя 4 минуты, 11 секунд (27.01.2012 - 13:53) Гость_гость написал(а):
class a {
private $_t = null;
public function __construct() {
$this->_t = $this;
}
public function __destruct() {
echo 'destruct';
unset($this->_t);
}
}
$ob_a = new a();
echo '1<br>';
echo '2<br>';
Выводит:
1
2
destruct
Спустя 3 минуты, 44 секунды (27.01.2012 - 13:56) Гость_гость написал(а):
class a {
private $_t = null;
public function __construct() {
$this->_t = $this;
}
public function __destruct() {
echo 'destruct<br>';
unset($this->_t);
}
}
$ob_a = new a();
unset($ob_a);
echo '1<br>';
echo '2<br>';
Выводит:
1
2
destruct
Спустя 1 минута, 42 секунды (27.01.2012 - 13:58) Гость_гость написал(а):
class a {
private $_t = null;
public function __construct() {
//$this->_t = $this;
}
public function __destruct() {
echo 'destruct<br>';
//unset($this->_t);
}
}
$ob_a = new a();
unset($ob_a);
echo '1<br>';
echo '2<br>';
Выводит:
destruct
1
2
Спустя 1 минута, 57 секунд (27.01.2012 - 14:00) Гость_гость написал(а):
Вывод - для PHP 5.2 объект висит "вечно".