exit () met simplement fin au programme avec un état de sortie numérique, tandis que die () affiche le message d'erreur sur stderr et quitte avec l'état EXIT_FAILURE. so exit() is exit and die() is also exit :)
Les alias permettent aux programmeurs d'utiliser celui qui leur convient. Je me souviens mieux de sortir que de mourir. D'autres se souviennent de mieux mourir que de sortir.
Même s'ils font la même chose, je réserve généralement diedes arrêts liés aux erreurs et exitpour tous les autres scénarios. Il semble simplement mieux circuler lors de la lecture du code.
nextgentech
7
Désolé de faire revivre cela, mais au moins pour moi ... dieest beaucoup plus rapide à écrire que exit... je commence à utiliser exitparce qu'il est plus lisible pour les programmeurs non PHP, mais dieest juste plus rapide à taper lorsque vous êtes pressé. De plus, par la façon dont je tape, je n'ai pas à changer la position de mes mains pour écrire die.
... En tant que codeur C et Perl, j'étais prêt à répondre: "Pourquoi, exit () met simplement fin au programme avec un état de sortie numérique, tandis que die () imprime le message d'erreur à stderr et se termine avec l'état EXIT_FAILURE. " Mais ensuite, je me suis souvenu que nous étions dans la terre à syntaxe désordonnée de PHP.
En PHP, exit () et die () sont identiques.
Les concepteurs ont évidemment pensé "Hmm, empruntons la sortie () de C. Et les gens de Perl l'aimeront probablement si nous prenons die () comme de Perl aussi. Oups! Nous avons maintenant deux fonctions de sortie! peut prendre une chaîne ou un entier comme argument et les rendre identiques! "
Le résultat final est que cela n'a pas vraiment rendu les choses "plus faciles", juste plus confuses. Les codeurs C et Perl continueront d'utiliser exit () pour lancer une valeur de sortie entière uniquement, et die () pour lancer un message d'erreur et quitter avec un échec. Les débutants et les personnes utilisant PHP comme première langue se demanderont probablement "umm, deux fonctions de sortie, laquelle dois-je utiliser?" Le manuel n'explique pas pourquoi il y a exit () et die ().
En général, PHP a beaucoup de redondances étranges comme celle-ci - il essaie d'être convivial avec des gens qui viennent d'horizons linguistiques différents, mais ce faisant, il crée une redondance déroutante.
Même s'il s'agit de la 100e réponse indiquant qu'ils sont équivalents (comme on le voit également dans ma réponse ^^), cela ajoute vraiment de très bons points. Surtout qu'ils ne sont PAS les mêmes dans d'autres langues (d'où la confusion en premier lieu). (+1)
Lévite
@Levit, non, non, vous vous trompez totalement . Personne ne possède de noms et différentes langues ne réutilisent les mêmes noms de manière inégalée. C'est bien parce que nous n'avons pas encore besoin d' une autre façon standard de faire les choses. La "confusion en premier lieu" est due au fait que PHP attribue deux noms différents à une fonction.
Pacerier
2
@Pacerier: Bien sûr, si vous le regardez du point de vue de "qui est la faute", c'est tout à fait vrai. C'est aussi un fait qu'ils signifient simplement des choses différentes dans plusieurs langues (ce qui est correct). En le regardant d'un point de vue neutre, cela est définitivement vrai: il y a de la confusion à cause des différentes significations (même si c'est la faute de php pour avoir créé deux alias de fonctions égales). Je ne voulais définitivement pas pointer du doigt l'une de ces langues, si c'est ce que vous avez compris dans mon commentaire ... (super xkcd btw (Y) ^^)
Lévite
2
Cela devrait certainement être la réponse choisie, bonne description!
Cody Brown
Un autre utilisateur a répondu qu'il exit()ne ferme pas la connexion alors que die()cela semble pertinent.
ner0
62
Comme indiqué précédemment, ces deux commandes produisent le même jeton d'analyse.
MAIS
Il y a une petite différence, et c'est le temps qu'il faut à l'analyseur pour retourner 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 y avoir une pénalité de temps en recherchant le nom de la fonction pour les fonctions commençant par " e ". Et il peut y avoir d'autres différences en raison de la façon dont le nom de la fonction entière est vérifiée.
Je doute qu'il sera mesurable à moins que vous ayez un environnement "parfait" dédié à l'analyse PHP, et beaucoup de 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é.
@Timeless, les perfectionnistes ne diraient pas "PHP est un langage interprété". PHP est un langage qui peut être interprété ou compilé en fonction de la configuration de votre serveur.
Pacerier
29
Et ... "mourir" est long de 3 caractères contre 4 pour "sortir". Il faut donc 25% moins de mémoire et d'espace de fichiers! ;)
Jan Derk
2
'"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 y avoir une pénalité de temps lors de la recherche du nom de la fonction pour les fonctions commençant par" e "'. signifie que la pénalité de temps se produirait lors de la recherche de la fonction commençant par d ? Habituellement, plus la liste est longue, plus le temps pour y trouver un élément est long.
Pere
9
Comme vous l'avez écrit, vous n'avez pas étudié l'analyseur PHP. Merci pour cette réponse inutile car elle est basée sur vos rêves sur la façon dont PHP est implémenté.
cela est également pratique lorsque quelqu'un vient d'une autre langue, s'il
acquiert une
Notez que si interactive ( en cours d' exécution php php -a) die;, die();, exit;et exit();n'a pas d' effet, alors que exit(sans virgule) quitte le mode interactif.
santiago arizti
31
Comme le disent toutes les autres bonnes réponses, dieet exitsont identiques / alias.
Bien que j'aie une convention personnelle selon laquelle lorsque je veux 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 en raison de certains problèmes (impossible de se connecter à db, impossible d'écrire dans un fichier, etc.), j'utilise die("Something went wrong.");pour "tuer" le script.
Lorsque 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 );
De cette façon, quand je vois exità un moment donné dans mon code, je sais qu'à ce stade, je veux quitter parce que la logique se termine ici. Quand je vois die, je sais que j'aimerais continuer l'exécution, mais je ne peux pas ou ne devrais pas 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 monde personne ne les empêchera d'utiliser dieou exitlà où ça ne correspond pas à mes conventions ...
Cette page dit dieest un allié de exit, donc ils sont identiques. Mais explique également que:
il existe des fonctions qui ont changé de nom à cause d'un nettoyage de l'API ou pour une autre raison et les anciens noms ne sont conservés que comme alias pour la compatibilité descendante. C'est généralement une mauvaise idée d'utiliser ce type d'alias, car ils peuvent être liés à l'obsolescence ou au changement de nom, ce qui conduira à un script non transférable.
Alors, appelez-moi paranoïaque, mais il n'y aura peut-être plus rien dieà l'avenir.
Il indique également Dans certains cas, il n'y a pas de nom préféré parmi les multiples, is_int()et is_integer()sont également bons par exemple. En regardant l' php-srchistorique des validations sur GitHub, la die()construction est en PHP au moins depuis 1999 quand elle a été convertie en un dépôt SVN, et probablement aussi longtemps que le langage a existé. Il semble absurde d’imaginer qu’elle sera un jour dépréciée.
Mark Amery
2
@MarkAmery, Bien que ses prémisses ne mènent pas à sa conclusion, la conclusion elle-même est valide: ~ "Appelez-moi paranoïaque, mais il n'y en aura peut-être pas exità l'avenir. Ou il n'y en aura peut-être pas dieà l'avenir"
Pacerier
@Pacerier Tout à fait raison. Il n'y aura peut-être pas de PHP à l'avenir, alors quittons tous ce concert de programmation et devenons des entrepreneurs de pompes funèbres ou des collecteurs d'impôts. Rien n'est certain que la mort et les impôts, après tout.
Mark Amery
@MarkAmery, "No PHP in the future" semble être au-dessus de la moyenne paranoïaque. L'histoire a montré que les langues incroyablement populaires ne s'éteignent pas aussi facilement (Fortran!).
Pacerier
1
Ne soyez pas paranoïaque. la sortie ne mourra jamais . :)
dolmen
10
Cette sortie de https://3v4l.org montre que die et exit sont fonctionnellement identiques.
Cet article est juste bizarre; à partir de la définition du scanner, vous pouvez dire qu'ils sont équivalents; s'il y a une différence, peut-être que le test a été exécuté sans opcache.
Ja͢ck
L'article concerne un benchmark qui ne peut pas être reproduit car le code n'est pas publié. N'y faites pas attention.
dolmen le
0
Fonctionnellement, ils sont identiques. Donc, choisir lequel utiliser est totalement une préférence personnelle. Sémantiquement en anglais, ils sont différents. Die semble négatif. Lorsque j'ai une fonction qui renvoie des données JSON au client et termine le programme, cela peut être horrible si j'appelle cette fonction jsonDie (), et il est plus approprié de l'appeler jsonExit (). Pour cette raison, j'utilise toujours exit au lieu de die.
L'OP pose des questions sur les fonctions de sortie et de fin de PHP uniquement.
Black Mamba
1
Oui, et je ne répondais qu'à cette question. Pour être conscient cependant, la question ne concerne pas uniquement la différence de fonctionnalité.
Luo Jiong Hui
L'une de mes plus belles fonctions s'appelle pd () - ce qui signifie Please Die. Donc je ne suis pas sûr que mourir soit une mauvaise chose dans un tel contexte :)
Ivan Ponomarev
En tant que développeur full stack, je ne me vois pas seulement en tant que programmeur, mais aussi en tant que concepteur d'expérience utilisateur. Et dans ce contexte, la sympathie est importante. La sympathie affecte non seulement la façon dont je conçois l'interface utilisateur, mais aussi la façon dont je code.
Luo Jiong Hui
0
D'après ce que je sais quand je regarde cette question ici
Il y est dit que "en PHP, il y a une différence distincte 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 pour montrer la différence entre exit () et die () qui n'a pas d'importance", et testé (personnellement)
Dans w3schools Quiz: les fonctions die () et exit () font exactement la même chose? ma réponse est fausse. C'est une mauvaise réponse. La bonne réponse est vraie.
Quelque chose que j'ai remarqué dans mes scripts au moins, c'est que exit () arrêtera le script en cours d'exécution et renverra le contrôle à tout script appelant, tandis que die arrêtera php sur ses traces. Je dirais que c'est une grosse différence?
@AdarshMadrecha ce n'est pas vrai. S'ils se trouvent à l'intérieur ou à l'extérieur d'une sous-fonction, le script php s'arrête toujours.
MERT DOĞAN
-5
Le résultat de la fonction exit () et de la fonction die () est toujours le même. Mais comme expliqué dans la page de manuel d'alias ( http://php.net/manual/en/aliases.php ), il est dit que la fonction die () appelle la fonction exit. Je pense qu'il est codé en dur comme ci-dessous:
functiondie($msg){exit($msg);}
Ce n'est pas un problème de performances pour les petits, moyens et grands projets, mais si le projet a des milliards, des milliards, des milliards, des milliards, des processus, cela se produit dans un état d'optimisation des performances très important.
Mais la plupart des gens ne pensent pas que c'est un problème, car si vous avez autant de processus, vous devez penser plus de problème que si une fonction est maître ou alias.
Mais, la réponse exacte est que; la fonction master allways est plus rapide que l'alias.
Finalement; La page de manuel Alias indique que vous ne pouvez plus utiliser le dé. Ce n'est qu'un alias et il est obsolète.
C'est généralement une mauvaise idée d'utiliser ce type d'alias, car ils peuvent être liés à l'obsolescence ou au changement de nom, ce qui conduira à un script non transférable. Cette liste est fournie pour aider ceux qui souhaitent mettre à jour leurs anciens scripts vers une syntaxe plus récente.
Le crénelage ne signifie pas «appeler une fonction». Vérifiez vos hypothèses avant d'élaborer une hypothèse.
dolmen le
@dolmen Aliases appelle toujours les fonctions principales dans les codes durs. Il s'agit d'une règle de programmation générale.
MERT DOĞAN le
@ MERTDOĞAN Un alias n'appelle rien. Un alias (en programmation ou dans la vie réelle) n'est qu'un autre nom d'un objet (qui a déjà un nom). die()n'est pas une fonction distincte. C'est juste un autre nom de exit(). Cette réponse contient des déclarations incorrectes sur les alias et leurs performances.
Ils sonnent à peu près de la même manière, cependant, la sortie () vous permet également de définir le code de sortie de votre script PHP.
Habituellement, vous n'en avez pas vraiment besoin, mais lorsque vous écrivez des scripts PHP de console, vous voudrez peut-être vérifier avec Bash par exemple si le script a tout terminé correctement.
Ensuite, vous pouvez utiliser exit () et rattraper cela plus tard. Die () ne supporte cependant pas cela.
Die () existe toujours avec le code 0. Donc essentiellement une commande die () fait ce qui suit:
Ce n'est pas vrai. dieet exitsont identiques (ils produisent le même jeton analyseur ( T_EXIT) et sont exécutés par le même code). Si le paramètre est un entier, il renverra ce code au shell. Si ce n'est pas le cas, il le restitue et renvoie 0. Donc die, ce exitsont littéralement des alias les uns pour les autres.
ircmaxell
6
eh bien si vous savez que vous pouvez utiliser exit ("Je sors ...");
Yuda Prawira
4
23 votes positifs jusqu'à présent pour une réponse tout simplement fausse! C'est pourquoi je ne vote jamais sur les réponses tant que je n'ai pas lu toutes les réponses concurrentes à la question et que je ne les comprends pas toutes (sauf celles terriblement écrites que je ne comprends pas).
Mark Amery
3
C'est exactement ce que @GeoffreyHale écrit dans sa réponse. Ce que vous avez posté comme réponse est ce à quoi on pourrait s'attendre, venant d'une langue comme Perl ou C. Mais comme les autres l'ont mentionné, ce n'est pas vrai pour php. Vous pourriez vraiment envisager de modifier votre réponse pour refléter cela, ou de la supprimer autrement.
so exit() is exit and die() is also exit :)
Réponses:
Il n'y a pas de différence - ce sont les mêmes.
Manuel PHP pour
exit
:Manuel PHP pour
die
:la source
die
des arrêts liés aux erreurs etexit
pour tous les autres scénarios. Il semble simplement mieux circuler lors de la lecture du code.die
est beaucoup plus rapide à écrire queexit
... je commence à utiliserexit
parce qu'il est plus lisible pour les programmeurs non PHP, maisdie
est juste plus rapide à taper lorsque vous êtes pressé. De plus, par la façon dont je tape, je n'ai pas à changer la position de mes mains pour écriredie
.DIFFÉRENCE D'ORIGINE
La différence entre PHP
die()
etexit()
PHP est leur origine .exit()
est compris entreexit()
en C .die()
est originairedie
de Perl .ÉQUIVALENT FONCTIONNEL
die()
etexit()
sont des fonctions équivalentes.Manuel PHP
Manuel PHP pour
die
:Manuel PHP pour
exit
:Manuel PHP pour la liste des alias de fonction :
DIFFÉRENT DANS D'AUTRES LANGUES
die()
etexit()
sont différents dans d'autres langages mais en PHP ils sont identiques.De Encore une autre diatribe PHP :
la source
exit()
ne ferme pas la connexion alors quedie()
cela semble pertinent.Comme indiqué précédemment, ces deux commandes produisent le même jeton d'analyse.
MAIS
Il y a une petite différence, et c'est le temps qu'il faut à l'analyseur pour retourner 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 y avoir une pénalité de temps en recherchant le nom de la fonction pour les fonctions commençant par " e ". Et il peut y avoir d'autres différences en raison de la façon dont le nom de la fonction entière est vérifiée.
Je doute qu'il sera mesurable à moins que vous ayez un environnement "parfait" dédié à l'analyse PHP, et beaucoup de 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é.
la source
Manuel PHP sur die :
Vous pouvez même faire
die;
la même chose queexit;
- avec ou sans parens.Le seul avantage de choisir
die()
plusexit()
, peut - être le temps que vous épargnerez à taper une lettre supplémentaire ;-)la source
php -a
)die;
,die();
,exit;
etexit();
n'a pas d' effet, alors queexit
(sans virgule) quitte le mode interactif.Comme le disent toutes les autres bonnes réponses,
die
etexit
sont identiques / alias.Bien que j'aie une convention personnelle selon laquelle lorsque je veux 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 en raison de certains problèmes (impossible de se connecter à db, impossible d'écrire dans un fichier, etc.), j'utilisedie("Something went wrong.");
pour "tuer" le script.Lorsque j'utilise exit:
Quand j'utilise die:
De cette façon, quand je vois
exit
à un moment donné dans mon code, je sais qu'à ce stade, je veux quitter parce que la logique se termine ici. Quand je voisdie
, je sais que j'aimerais continuer l'exécution, mais je ne peux pas ou ne devrais pas 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 monde personne ne les empêchera d'utiliser
die
ouexit
là où ça ne correspond pas à mes conventions ...la source
Voici quelque chose d'assez intéressant. Bien que
exit()
etdie()
soient équivalents,die()
ferme la connexion.exit()
ne ferme pas la connexion.die()
:exit()
:Résultats:
exit()
:die()
:Au cas où vous en auriez besoin pour votre projet.
Crédits: https://stackoverflow.com/a/20932511/4357238
la source
exit
et dedie
travailler de la même manière, ils ont tous deux une connexion étroite.Côté fonctionnalité, ils sont identiques mais je les utilise dans les scénarios suivants pour rendre le code lisible:
Utilisez die () en cas d'erreur et arrêtez l'exécution.
par exemple
die( 'Oops! Something went wrong' );
Utilisez exit () lorsqu'il n'y a pas d'erreur et devez arrêter l'exécution.
par exemple
exit( 'Request has been processed successfully!' );
la source
Cette page dit
die
est un allié deexit
, donc ils sont identiques. Mais explique également que:Alors, appelez-moi paranoïaque, mais il n'y aura peut-être plus rien
die
à l'avenir.la source
is_int()
etis_integer()
sont également bons par exemple. En regardant l'php-src
historique des validations sur GitHub, ladie()
construction est en PHP au moins depuis 1999 quand elle a été convertie en un dépôt SVN, et probablement aussi longtemps que le langage a existé. Il semble absurde d’imaginer qu’elle sera un jour dépréciée.exit
à l'avenir. Ou il n'y en aura peut-être pasdie
à l'avenir"Cette sortie de https://3v4l.org montre que die et exit sont fonctionnellement identiques.
la source
Ils sont essentiellement les mêmes, bien que cet article suggère le contraire.
la source
Fonctionnellement, ils sont identiques. Donc, choisir lequel utiliser est totalement une préférence personnelle. Sémantiquement en anglais, ils sont différents. Die semble négatif. Lorsque j'ai une fonction qui renvoie des données JSON au client et termine le programme, cela peut être horrible si j'appelle cette fonction jsonDie (), et il est plus approprié de l'appeler jsonExit (). Pour cette raison, j'utilise toujours exit au lieu de die.
la source
D'après ce que je sais quand je regarde cette question ici
Il y est dit que "en PHP, il y a une différence distincte 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 pour montrer la différence entre exit () et die () qui n'a pas d'importance", et testé (personnellement)
la source
Dans w3schools Quiz: les fonctions die () et exit () font exactement la même chose? ma réponse est fausse. C'est une mauvaise réponse. La bonne réponse est vraie.
Voici la capture d'écran:
la source
Quelque chose que j'ai remarqué dans mes scripts au moins, c'est que exit () arrêtera le script en cours d'exécution et renverra le contrôle à tout script appelant, tandis que die arrêtera php sur ses traces. Je dirais que c'est une grosse différence?
la source
Le résultat de la fonction exit () et de la fonction die () est toujours le même. Mais comme expliqué dans la page de manuel d'alias ( http://php.net/manual/en/aliases.php ), il est dit que la fonction die () appelle la fonction exit. Je pense qu'il est codé en dur comme ci-dessous:
Ce n'est pas un problème de performances pour les petits, moyens et grands projets, mais si le projet a des milliards, des milliards, des milliards, des milliards, des processus, cela se produit dans un état d'optimisation des performances très important.
Mais la plupart des gens ne pensent pas que c'est un problème, car si vous avez autant de processus, vous devez penser plus de problème que si une fonction est maître ou alias.
Mais, la réponse exacte est que; la fonction master allways est plus rapide que l'alias.
Finalement; La page de manuel Alias indique que vous ne pouvez plus utiliser le dé. Ce n'est qu'un alias et il est obsolète.
la source
die()
n'est pas une fonction distincte. C'est juste un autre nom deexit()
. Cette réponse contient des déclarations incorrectes sur les alias et leurs performances.Ils sonnent à peu près de la même manière, cependant, la sortie () vous permet également de définir le code de sortie de votre script PHP.
Habituellement, vous n'en avez pas vraiment besoin, mais lorsque vous écrivez des scripts PHP de console, vous voudrez peut-être vérifier avec Bash par exemple si le script a tout terminé correctement.
Ensuite, vous pouvez utiliser exit () et rattraper cela plus tard. Die () ne supporte cependant pas cela.
Die () existe toujours avec le code 0. Donc essentiellement une commande die () fait ce qui suit:
C'est la même chose que:
la source
die
etexit
sont identiques (ils produisent le même jeton analyseur (T_EXIT
) et sont exécutés par le même code). Si le paramètre est un entier, il renverra ce code au shell. Si ce n'est pas le cas, il le restitue et renvoie 0. Doncdie
, ceexit
sont littéralement des alias les uns pour les autres.