Почему в моём примере __destruct() отрабатывает 2 раза?

e-statik

Guest
Почему в моём примере __destruct() отрабатывает 2 раза?

PHP 5.0.5
Осваиваю :) . Написал код:
=================================
PHP:
<?php
class cTestClass
{
	public $statement = "default";
	public $counter = 0;

	function __construct()
	{
		echo "Сработал конструктор объекта!<br>";
	}

	function __destruct()
	{
		echo "Уничтожение объекта!<br>";
	}
}

session_start();
$_SESSION['my_class'] = new cTestClass();

echo $_SESSION['my_class']->statement."<br>";
?>
=================================
на выходе:
Код:
Сработал конструктор объекта!
Уничтожение объекта!
default
Уничтожение объекта!
Почему так происходит? Последний раз __destruct() отрабатывает видимо когда уничтожается $_SESSION['my_class'] - вроде логично.
А в первый раз?
Что __destruct() - не деструктор, а некий финалайзер, я уяснил (если ситуация не изменилась)...
Спасибо за ответ!
 

fixxxer

К.О.
Партнер клуба
>Почему так происходит?
Ты забыл уточнить, что это происходит, когда у тебя в сессии уже лежит объект. то есть при повторном запуске скрипта. =) все логично.
 

e-statik

Guest
Да, верно :)
Уже увидел, что в первый раз всё отрабатывает нормально, а во второй - так, как я указал выше.
Т.е. это уже вопрос о сессиях.

Но мне всё= не совсем понятно, что там происходит.
В первый раз в сессии создаётся переменная - элемент моего класса. Почему в этом случае после отработки скрипта вызывается __destruct() ? По идее объект не уничтожен, а хранится в сессии (или, не смотря на это, для PHP он всё= уже умер, хоть и имеет шанс на реинкарнацию, если его не сметёт GC)?
А во второй раз - по F5 - что происходит? Уже созданной переменной я назначаю новый объект, а, значит, старый при этом умирает с __destruct()?

Подскажите или поправьте если не сложно.
 

fixxxer

К.О.
Партнер клуба
PHP:
class cTestClass
{
    public $statement = "default";
    public $counter = 0;

    function __construct()
    {
        echo "Сработал конструктор объекта!<br>";
    }

    function __destruct()
    {
        echo "Уничтожение объекта!<br>";
    }
} 

$a = new cTestClass();
$a = new cTestClass();
 

e-statik

Guest
Повертел покрутил по-всякому.. Вроде разобрался.
Выходит, что я был прав в своих рассуждениях :)

Спасибо за участие!
 
Сверху