2010-11-22 23 views
2
<?php 

class Test { 

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

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

} 

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

J'ai une classe qui assigne simplement différentes variables de session puis ramène l'utilisateur à son script précédent. J'ai pensé qu'il serait plus simple d'avoir une seule redirection sur la destruction au lieu de 10 lignes disant la même chose.Est-ce que ce script PHP peut être tué?

J'ai trouvé plus tard un bug dans mon script et j'ai découvert qu'il était proche de l'impossible. Pour référence future, existe-t-il de toute façon pour tuer ce script ou le redirigera-t-il toujours?

Pour clarifier, le script redirige toujours même avec die(), quitte dans la fonction foo.

+0

Pour "tuer" comment. Pour un client? –

+1

Connexe: http://stackoverflow.com/questions/236795/php-destructor-vs-register-shutdown-function/236830#236830 –

Répondre

1

$Test objet est détruit lorsqu'un navigateur se déconnecte: il ne redirigera pas simplement parce que le navigateur ne recevra pas l'en-tête! Toutefois, si vous explicitement unset($Test);, il sera

UPD: Je me trompe: le script appellera tous les Destructeurs avec le navigateur encore connecté. Cependant, je ne compterais pas sur cela

+0

Le script redirige toujours. J'aurais pensé que l'action attendue ci-dessus serait moitié moins après l'impression Foo – JasonS

+0

@JasonS: La redirection peut toujours se produire si la mise en mémoire tampon de sortie est activée. Il y a un [setting] (http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering) pour cela dans php.ini; peut-être que c'est ici? –