2010-11-22 4 views
2
<?php 

class Test { 

    public function foo() { 
     echo "Foo!"; 
     die(); 
    } 

    public function __destruct() { 
     header('location: http://google.com'); 
    } 

} 

$Test = new Test; 
$Test->foo(); 

У меня есть класс, который просто назначает различные переменные сеанса, а затем переводит пользователя обратно в свой предыдущий скрипт. Я подумал, что проще было бы сделать одну переадресацию на destruct вместо 10 строк, говорящих одно и то же.Может ли этот скрипт PHP быть убит?

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

Чтобы уточнить, сценарий всегда перенаправляется даже с помощью функции die(), выход из функции foo.

+0

Чтобы «убить» как. Для клиента? –

+1

Связано: http://stackoverflow.com/questions/236795/php-destructor-vs-register-shutdown-function/236830#236830 –

ответ

1

$Test объект разрушается, когда браузер отключается: он не будет перенаправляться только потому, что браузер не получит заголовок! Однако, если вы явно unset($Test);, он будет

UPD: Я не так: сценарий будет вызывать все деструкторы с браузером по-прежнему подключен. Тем не менее, я бы не стал полагаться на это

+0

Сценарий всегда перенаправляется. Я бы подумал, что ожидаемое действие выше будет для него до половины после печати Foo – JasonS

+0

@JasonS: перенаправление может все еще возникать, если буферизация вывода включена. Существует [настройка] (http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering) для этого в php.ini; может, это здесь? –

Смежные вопросы