Деструктор называется:
- для любого объекта, который вы создали
- в той части скрипта, которую вы опубликовали, вы не создали ни одного объекта - может быть, это причина того, что деструктор не был вызван?
- в конце скрипта PHP
Использование заголовка для перенаправления не препятствует вызову деструктора.
Также обратите внимание, что деструктор вызывается в конце сценария PHP - но не предотвращает перенаправление, так как заголовок, говорящий «redirect», уже создан.
Например, с этим кодом:
class Test {
public function __destruct() {
echo 'hehe';
file_put_contents('/tmp/test-desctructor.txt', "glop\n");
exit;
}
}
$a = new Test();
header('Location: http://example.com/');
exit;
(обратите внимание, что я исправил несколько ошибок и добавил фактическое описание класса)
Вы не увидите «hehe
» на выходе, но обнаружите, что файл /tmp/test-desctructor.txt
создан:
$ cat /tmp/test-desctructor.txt
glop
Вам нужно будет удалить перенаправление, если вы хотите получить «hehe
» на выходе.
Деструктор вызывается после того, как заголовок был сгенерирован - и вызов exit из деструктора не изменит тот факт, что этот заголовок уже был сгенерирован.
О, а вот примечание из руководства (цитата - внизу страницы) :
Примечание: деструкторы вызывались во время
Завершение работы скрипта имеет заголовки HTTP
уже отправлено.
Вот почему вы не видите свою строку "hehe
": вызывается деструктор; вы просто не видите его на экране; -)
Вот почему я использовал файл в моем примере, кстати ;-)