Once upon a time… die() & exit()

16 12 2010

Différence entre die() et exit()

En PHP, il y a 2 fonctions fort pratiques qui permettent de stopper l’exécution d’un script :

  • die()
  • exit()

die() est un alias de exit(), c’est juste un nom différent pour la même fonction.

On lit beaucoup de conneries à propos du comportement de ces fonctions.
Récemment par exemple, j’ai entendu dire que die() et exit() avaient un comportement légérement différent :

  • die() termine le script courant
  • exit() termine TOUTE l’éxécution : le script courant, le script parent si il y a eu des includes… ABSOLUMENT TOUT

Alors pour en avoir le cœur net, j’ai fait mon petit test avec ces 2 scripts :
main.php :

<?php
include('child.php');

$row = date('l j F Y, H:i:s')."\n";
$fichier = fopen('output_main.txt','a+');
fputs($fichier, $row);
fclose($fichier);
?>

child.php :

<?php
// die();

$row = date('l j F Y, H:i:s')."\n";
$fichier = fopen('output_child.txt','a+');
fputs($fichier, $row);
fclose($fichier);

die();
// exit();
?>

Quand j’exécute main.php, seul le fichier output_child.txt est créé. Cela signifie que le main ne s’est pas éxécuté entièrement, tout ce qui est après le include n’a pas été éxécuté.

PS : le test a été fait avec PHP 5.2 (EasyPHP), peut être qu’avec PHP 3, au temps des dinosaures gambadaient dans les prairies et où Pierre Bénichou était jeune, ces fonctions n’étaient pas identiques. Mais on est en 2010 ^^.

Putain il est intéressant ce billet ?

Ouais, à première vue c’est pas la news du siècle, mais la fonction exit() est vraiment très pratique. Elle permet d’éviter d’écrire des structures conditionnelles complexes avec plusieurs niveaux d’indentation, en écrivant ce que j’appelle des filtres.

Quand un filtre détecte qu’une condition n’est pas remplie pour continuer, il termine le script, point final.


Partager :

Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Digg
  • del.icio.us
  • Facebook
  • Digg -fr
  • Live
  • MisterWong Fr
  • Scoopeo
  • StumbleUpon
  • Technorati
  • Wikio FR

Actions

Informations

Et maintenant je fais quoi ?

Aucun commentaire

Une réponse à “Once upon a time… die() & exit()”

11 02 2011
Kasey (11:41:09) :

Ouep il déchire cet article, je me posait justement la question.

Laisser un commentaire

Vous pouvez utiliser ces balises html : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>