web-dev-qa-db-fra.com

Quelles sont les différences entre die () et exit () en PHP?

Quelles sont les différences entre les fonctions die() et exit() en PHP?

Je pense que les deux ont les mêmes fonctionnalités, mais je doute qu'il y ait quelque chose de différent dans les deux ... qu'est-ce que c'est?

637
coderex

Il n'y a pas de différence - ils sont les mêmes.

Manuel PHP pour exit :

Remarque: Cette construction de langage est équivalente à die() .

Manuel PHP pour die :

Cette construction de langage est équivalente à exit() .

519
Marek Karbarz

DIFFERENCE D'ORIGINE

La différence entre die() et exit() dans PHP correspond à leur origine .


FONCTIONNELLEMENT ÉQUIVALENT

die() et exit() sont des fonctions équivalentes.

Manuel PHP

Manuel PHP pour die :

Cette construction de langage est équivalente à exit() .

Manuel PHP pour exit :

Remarque: Cette construction de langage est équivalente à die() .

Manuel PHP pour Liste des alias de fonctions :

die est un alias pour la fonction maître exit()


DIFFÉRENT DANS D'AUTRES LANGUES

die() et exit() sont différents dans les autres langues mais dans PHP ils sont identiques.

De Encore un autre PHP rant :

... En tant que codeur C et Perl, j’étais prêt à répondre: "Pourquoi, exit () arrête-t-il simplement le programme avec un statut de sortie numérique, tandis que die () imprime le message d’erreur sur stderr et quitte avec le statut EXIT_FAILURE. " Mais ensuite je me suis souvenu que nous étions en désordre-syntaxe-pays de PHP.

En PHP, exit () et die () sont identiques.

Les concepteurs ont évidemment pensé "Hmm, empruntons exit () de C . Et les gens de Perl aimeront probablement si nous prenons die () tel qu'il est de Perl aussi. Oups! Nous avons deux fonctions de sortie maintenant! Faisons en sorte qu'elles puissent toutes les deux prendre une chaîne ou un entier en argument et les rendre identiques! "

Le résultat final est que cela n'a pas vraiment rendu les choses "plus faciles", mais plus confuses. Les codeurs C et Perl continueront à utiliser exit () pour lancer une valeur de sortie entière uniquement, et die () pour lancer un message d'erreur et quitter en cas d'échec. Les débutants et les personnes utilisant PHP comme première langue se demanderont probablement "euh, deux fonctions de sortie, laquelle devrais-je utiliser?" Le manuel n'explique pas pourquoi il y a exit () et die ().

De manière générale, PHP présente une redondance aussi étrange que celle-ci: il essaie d'être sympathique avec les personnes de langues différentes, mais crée une redondance source de confusion.

206
Geoffrey Hale

Comme indiqué précédemment, ces deux commandes produisent le même jeton analyseur.

MAIS

Il y a une petite différence, et c'est combien de temps il faut à l'analyseur pour renvoyer le jeton.

Je n'ai pas étudié l'analyseur PHP, mais s'il s'agit d'une longue liste de fonctions commençant par "d" et d'une liste plus courte commençant par "e", il doit exister une pénalité de temps pour la recherche. nom pour les fonctions commençant par "e". Et il peut y avoir d'autres différences dues à la manière dont le nom de la fonction est vérifié.

Je doute que ce soit mesurable sauf si vous avez un environnement "parfait" dédié à l'analyse de PHP et à de nombreuses requêtes avec des paramètres différents. Mais il doit y avoir une différence, après tout, PHP est un langage interprété.

59
Bob

Manuel PHP sur die :

die - équivalent à sortir

Vous pouvez même faire die; de la même manière que exit; - avec ou sans parenthèses.

Le seul avantage de choisir die() sur exit() pourrait être le temps dont vous disposerez pour taper une lettre supplémentaire ;-)

41
Levit

Comme toutes les autres réponses correctes le disent, die et exit sont identiques/alias.

Bien que j'ai une convention personnelle voulant que lorsque je souhaite terminer l'exécution d'un script quand il est attendu et souhaité, j'utilise exit;. Et lorsque j’ai besoin de terminer l’exécution à cause de problèmes (je ne parviens pas à me connecter à la base de données, je ne parviens pas à écrire dans un fichier, etc.), j’utilise die("Something went wrong."); pour "tuer" le script.

Quand j'utilise exit:

header( "Location: http://www.example.com/" ); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit; // I would like to end now.

Quand j'utilise die:

$data = file_get_contents( "file.txt" );
if( $data === false ) {
    die( "Failure." ); // I don't want to end, but I can't continue. Die, script! Die!
}
do_something_important( $data );

Ainsi, lorsque je vois exit à un moment donné de mon code, je sais qu’à ce stade je veux quitter car la logique se termine ici. Lorsque je vois die, je sais que je souhaite continuer l'exécution, mais je ne peux ou ne dois pas le faire en raison d'une erreur lors de l'exécution précédente.

Bien sûr, cela ne fonctionne que lorsque vous travaillez sur un projet seul. Quand il y a plus de personnes, personne ne les empêchera d'utiliser die ou exit là où cela ne correspond pas à mes conventions ...

27
Lukas

Cette page dit que die est un alies de exit, donc ils sont identiques. Mais explique aussi que:

certaines fonctions ont changé de nom à cause d'un nettoyage d'API ou d'une autre raison et les anciens noms ne sont conservés que comme alias pour des raisons de compatibilité ascendante. Il est généralement déconseillé d’utiliser ce type de pseudonyme, car ils peuvent être liés à une obsolescence ou à un changement de nom, ce qui entraînerait un script non transférable.

Alors, appelez-moi paranoïaque, mais il se peut qu'il n'y ait pas de dieing dans le futur.

11
Pedram Behroozi

Voici quelque chose qui est assez intéressant. Bien que exit() et die() soient équivalents, die() ferme la connexion. exit() ne ferme pas la connexion.

die():

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

exit():

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

Résultats:

exit():

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

die():

HTTP/1.1 304 Not Modified 
Connection: close

Il vous suffit de prendre cela en compte pour votre projet.

Crédits: https://stackoverflow.com/a/20932511/4357238

10
Edward

Cette sortie de https://3v4l.org montre que die et exit sont fonctionnellement identiques. enter image description here

8
Simon77

Ils sont essentiellement les mêmes, bien que ceci article suggère le contraire.

6
o.k.w

Sur le plan des fonctionnalités, elles sont identiques mais je les utilise dans les scénarios suivants pour rendre le code lisible:

Utilisez "die" lorsqu'il y a une erreur et devez arrêter l'exécution.

par exempledie( 'Oops! Something went wrong' );

Utilisez "exit" lorsqu'il n'y a pas d'erreur et que vous devez arrêter l'exécution.

par exempleexit( 'Request has been processed successfully!' );

6
aagjalpankaj

Lorsque vous utilisez la ligne de commande,

 die("Error");

Imprimera sur "Erreur" sur STDOUT et quittera avec le code d'erreur 0.

si vous voulez quitter avec le code d'erreur 1, vous devez:

  fwrite(STDERR, "Error");
    exit(1);

Cela peut être utile lors de l'exécution de scripts php à partir de scripts de ligne de commande ou de shell et vous voulez voir si le script s'est terminé avec un code de sortie différent de zéro. réponse copiée de charanjeet de Quora

0
prabhjot

die () et exit () les deux fonctions sont équivalentes. La principale différence est que exit () arrêtera le script mais imprimera la sortie. Mais die () arrête directement l'exécution du script.

0
Vaibhav Ahirrao

De ce que je sais quand je regarde cette question ici

Il y était indiqué que "en PHP, il existe une différence nette dans la sortie de l'en-tête. Dans les exemples ci-dessous, j'ai choisi d'utiliser un en-tête différent, mais cela n'a pas d'importance de montrer la différence entre exit () et die ()", et testé (personnellement)

0
Dhiva Banyu Wigara