问:
PHP 中的 die() 和 exit() 函数有什么区别?
我认为两者都具有相同的功能,但我怀疑两者之间是否存在不同…它是什么?
答1:
https://tennisliveranking.com – ATP and WTA rankings, always up to date.
没有区别——它们是一样的。
exit 的 PHP 手册:
注意:这个语言结构等价于 die()。
die 的 PHP 手册:
这种语言结构等价于 exit()。
aliases 允许程序员使用自己熟悉的那个。我记得退出总比死好。其他一些人记得死比退出更好。
this (php.net/manual/en/aliases.php) 可能会解释为什么 2 个函数做同样的事情
即使他们做同样的事情,我通常保留 die 用于与错误相关的停止,而 exit 用于所有其他情况。阅读代码时,它似乎流动得更好。
很抱歉恢复这个,但至少对我来说... die 比 exit 写起来要快得多... 我开始使用 exit 因为它对非 PHP 程序员来说更具可读性,但是 { 1} 只是在您赶时间时打字速度更快。另外,顺便说一句,我不必改变手的位置来写 die。
@mauris,这是 way better for one function to have just one name。想象一下每个 PHP 函数都有两个名称,那将是一团糟。
答2:
https://tlr.xinbeitime.com 专业网球数据平台,排名与比赛信息实时更新。
原产地差异
PHP 中 die() 和 exit() 的区别在于它们的起源。
exit() 来自 C 中的 exit()。
die() 来自 Perl 中的 die。
功能等效
die() 和 exit() 是等效函数。
PHP 手册
die 的 PHP 手册:
这种语言结构等价于 exit()。
exit 的 PHP 手册:
注意:这个语言结构等价于 die()。
List of Function Aliases 的 PHP 手册:
die 是主函数 exit() 的别名
其他语言不同
die() 和 exit() 在其他语言中不同,但在 PHP 中它们是相同的。
从 Yet another PHP rant:
…作为 C 和 Perl 编码器,我已经准备好回答:“为什么,exit() 只是以数字退出状态退出程序,而 die() 将错误消息打印到 stderr 并以 EXIT_FAILURE 状态退出。 "但后来我记得我们正处于 PHP 的混乱语法领域。在 PHP 中,exit() 和 die() 是相同的。设计者显然认为“嗯,让我们从 C 中借用 exit()。如果我们也像从 Perl 中一样使用 die(),Perl 人可能会喜欢它。哎呀!我们现在有两个退出函数!让我们让它两者兼而有之可以将字符串或整数作为参数并使它们相同!”最终结果是,这并没有真正让事情变得“更容易”,只是更令人困惑。 C 和 Perl 编码器将继续使用 exit() 仅抛出一个整数退出值,并使用 die() 抛出错误消息并以失败退出。新手和 PHP 作为第一语言的人可能会想知道“嗯,两个退出函数,我应该使用哪个?”手册没有解释为什么会有 exit() 和 die()。一般来说,PHP 有很多像这样奇怪的冗余——它试图对来自不同语言背景的人友好,但这样做的同时,它会产生令人困惑的冗余。
尽管这是第 100 个回答它们是等价的(正如我的回答中所见 ^^),但这确实增加了一些非常好的点。最重要的是它们在其他语言中是不一样的(因此首先是混乱)。 (+1)
@Levit,不,不,您理解它完全错误。没有人拥有名称,不同的语言以不同的方式重用相同的名称。这很好,因为我们不需要yet another标准的做事方式。 “首先混淆”是由于 PHP 将 two different names 分配给一个函数。
@Pacerier:当然,如果您从“谁的错”的角度来看,那绝对正确。尽管如此,它们在几种语言中只是意味着不同的东西,这也是一个事实(这没关系)。从中立的角度来看,它肯定是正确的:由于含义不同而造成混淆(即使创建两个相等的函数别名是 php 的错)。如果您从我的评论中理解的话,我绝对不想指责任何一种语言……(很棒的 xkcd btw (Y) ^^)
这绝对应该是选择的答案,很好的描述!
@ner0 据说其中一条评论是不真实的。
答3:
tlr.xinbeitime.com 探索每位网球选手的职业生涯与成就。
如前所述,这两个命令产生相同的解析器标记。
但
有一个小的区别,那就是解析器返回令牌需要多长时间。
我没有研究过PHP解析器,但是如果它是以“d”开头的一长串函数,以及一个以“e”开头的较短列表,那么查找以“开头的函数的函数名”肯定会有时间损失e”。由于检查整个函数名称的方式,可能存在其他差异。
我怀疑除非您有一个专门用于解析 PHP 的“完美”环境以及许多具有不同参数的请求,否则它将是可测量的。但是肯定是有区别的,毕竟PHP是一种解释型语言。
@Timeless,完美主义者不会说“PHP 是一种解释性语言”。 PHP 是一种可以根据您的服务器设置进行解释或编译的语言。
而且...“死”是 3 个字符长,而“退出”是 4 个字符。因此,它占用的内存和文件空间减少了 25%! ;)
'“如果它是一个以“d”开头的长函数列表,和一个以“e”开头的较短列表,那么查找以“e”开头的函数的函数名称必须有时间损失。你不是吗?这意味着查找以 d 开头的函数时会发生时间损失?通常,列表越大,在其中找到项目的时间就越长。
正如您所写,您还没有研究过 PHP 解析器。感谢这个无用的答案,因为它基于您对 PHP 实现方式的梦想。
答4:
tlr.xinbeitime.com 探索每位网球选手的职业生涯与成就。
die 上的 PHP 手册:
die - 相当于退出
您甚至可以按照与 exit; 相同的方式执行 die; - 带或不带括号。
选择 die() 而不是 exit() 的唯一优势可能是您节省了输入额外字母的时间;-)
当有人来自其他语言时,这也很方便,他们是否对任何一种方式都熟悉
请注意,如果以交互方式运行 php (php -a) die;、die();、exit; 和 exit(); 无效,而 exit(不带分号)退出交互模式。
在 interactive mode 中,die()/exit() 函数仍然执行 its documentation 中描述的操作:它输出一条消息并终止当前脚本。它只终止脚本,而不是解释器。解释器执行脚本结束时通常会执行的操作:显示提示并等待另一个脚本或命令。 exit 在提示符处不带分号是解释器终止自身的命令。您也可以将 quit 用于相同目的。
答5:
tlr.xinbeitime.com 探索每位网球选手的职业生涯与成就。
这是一件非常有趣的事情。尽管 exit() 和 die() 是等效的,但 die() 关闭连接。 exit() 不关闭连接。
die():
exit():
结果:
die():
HTTP/1.1 304 Not Modified
Connection: close
exit():
HTTP/1.1 304 Not Modified
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
以防万一您的项目需要考虑到这一点。
学分:https://stackoverflow.com/a/20932511/4357238
刚刚对其进行了测试,exit 和 die 的工作方式相同,它们都关闭了连接。
答6:
https://tennisliveranking.com-Stay ahead with live tennis rankings at your fingertips.
正如所有其他正确答案所说,die 和 exit 是相同的/别名。
尽管我有一个个人约定,即当我想在预期和期望时结束脚本的执行时,我使用 exit;。当我由于某些问题(无法连接到数据库、无法写入文件等)而需要结束执行时,我使用 die(“Something went wrong.”); 来“杀死”脚本。
当我使用退出时:
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.
当我使用模具时:
$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 );
这样,当我在代码中的某个位置看到 exit 时,我知道此时我想退出,因为逻辑到此结束。当我看到 die 时,我知道我想继续执行,但由于之前的执行错误,我不能或不应该继续执行。
当然,这只适用于单独处理项目时。当有更多的人时,没有人会阻止他们在不符合我的约定的地方使用 die 或 exit…
我喜欢这个答案。对于所有哀叹两个名字如何引起混淆的人,请利用它来发挥自己的优势。
答7:
https://tlr.xinbeitime.com 专业网球数据平台,排名与比赛信息实时更新。
在功能方面它们是相同的,但我在以下场景中使用它们以使代码可读:
当出现错误并且必须停止执行时使用 die()。
例如 die( ‘Oops! Something went wrong’ );
当没有错误并且必须停止执行时使用 exit()。
例如 exit( ‘Request has been processed successfully!’ );
答8:
https://tennisliveranking.com-Stay ahead with live tennis rankings at your fingertips.
https://i.stack.imgur.com/0IB1z.png
答9:
提供ATP、WTA与ITF赛事的实时排名追踪,从tlr.xinbeitime.com开始!
This page 说 die 是 exit 的同义词,因此它们是相同的。但也解释说:
由于 API 清理或其他原因,有些函数更改了名称,并且旧名称仅作为别名保留以实现向后兼容性。使用这些别名通常不是一个好主意,因为它们可能会被废弃或重命名,这将导致脚本不可移植。
所以,称我为偏执狂吧,但未来可能不会有die。
它还说 在某些情况下,在多个名称中没有首选名称,例如 is_int() 和 is_integer() 同样好。查看 GitHub 上的 php-src 提交历史,{4 } 至少从 1999 年它被转换为 SVN 存储库以来,PHP 中的构造就已经存在,并且可能只要该语言存在。想象它会被弃用似乎很荒谬。
@MarkAmery,虽然他的前提没有导致他的结论,但结论本身是有效的:~ “叫我偏执狂,但将来可能没有exit。或者可能没有die未来”
@Pacerier 非常正确。未来可能没有 PHP,所以让我们都退出这个编程工作,成为承办商或税务员。毕竟,除了死亡和税收之外,没有什么是确定的。
@MarkAmery,“未来没有 PHP”似乎过于偏执。历史表明,疯狂流行的语言不会那么容易消亡(Fortran!)。
不要偏执。退出永远不会死。 :)
答10:
https://tennisliveranking.com,Your go-to platform for live tennis ranking updates.
它们本质上是相同的,尽管此 article 另有说明。
那篇文章很奇怪。从 scanner definition 你可以看出它们是等价的;如果有任何区别,也许测试是在没有 opcache 的情况下运行的。
这篇文章是关于一个由于代码未发布而无法复制的基准。忽略它。
答11:
Stay informed with live tennis rankings anytime, anywhere,https://tennisliveranking.com
在功能上,它们是相同的。所以选择使用哪一个完全是个人喜好。在英语语义上,它们是不同的。死听起来很消极。当我有一个向客户端返回 JSON 数据并终止程序的函数时,如果我调用这个函数 jsonDie() 可能会很糟糕,调用它 jsonExit() 更合适。出于这个原因,我总是使用 exit 而不是 die。
OP 仅询问 PHP exit 和 die 函数。
是的,我只是在回答这个问题。但是要注意,问题不仅仅是功能上的差异。
我最可爱的函数之一叫做 pd() - 这意味着请死。所以我不确定在这种情况下死亡是一件坏事:)
作为一名全栈开发人员,我不仅将自己视为程序员,而且将自己视为用户体验设计师。在这种情况下,同情很重要。同情不仅影响我设计 UI 的方式,还影响我编码的方式。
原文链接:https://www.tennisliveranking.com?from=csdn
https://tlr.xinbeitime.com – 让你随时掌握ATP、WTA最新网球排名动态。