2010-11-22 6 views
2
<?php 

class Test { 

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

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

} 

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

나는 다양한 세션 변수를 할당 한 클래스를 가지고 있으며 사용자에게 이전 스크립트로 다시 핑합니다. 나는 같은 일을 말하는 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 : 출력 버퍼링이 켜져 있으면 리디렉션이 계속 발생할 수 있습니다. php.ini 파일에는 [설정] (http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering)이 있습니다. 아마 여기에있을거야? –

관련 문제