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?
La différence entre die()
et exit()
dans PHP correspond à leur origine .
exit()
provient de exit()
dans C .die()
provient de die
dans Perl .die()
et exit()
sont des fonctions équivalentes.
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()
et exit()
sont différents dans les autres langues mais dans PHP ils sont identiques.
... 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.
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é.
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 ;-)
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 ...
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 die
ing dans le futur.
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.
Cette sortie de https://3v4l.org montre que die et exit sont fonctionnellement identiques.
Ils sont essentiellement les mêmes, bien que ceci article suggère le contraire.
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!' );
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
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.
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)