PHP中的die()和exit()有什么区别?

cod*_*rex 648 php exit die

PHP中有哪些区别die()exit()功能有什么区别?

我认为两者都具有相同的功能,但我怀疑两者有什么不同......它是什么?

Mar*_*arz 525

没有区别 - 它们是一样的.

PHP手册exit:

注意:这种语言结构相当于die().

PHP手册die:

这种语言结构相当于exit().

  • 即使他们做同样的事情,我通常会为错误相关的停止保留`die`,为所有其他场景保留`exit`.在阅读代码时,它似乎流动得更好. (79认同)
  • 这个(http://php.net/manual/en/aliases.php)可能会解释为什么2个函数做同样的事情 (27认同)
  • 别名允许程序员使用舒适的程序员.我记得退出比死更好.其他人记得比退出更好. (15认同)
  • @mauris,[一个函数只有一个名称的方式更好](http://stackoverflow.com/a/27851270/632951).想象一下,每个PHP函数都有两个名称,这将是一个完整的混乱**. (7认同)
  • 很抱歉重振这一点,但至少对我来说...`die`写得比`exit`快得多......我开始使用`exit`因为它对非PHP程序员来说更具可读性,但是当你匆忙时,你可以更快地打字.另外,通过我输入的方式,我不必改变我的手的位置来写"死". (6认同)
  • @nextgentech,我并不是说您需要选择“退出”而不是“死”,或者选择“死”而不是“退出”。我是说要下定决心,**选择**。任一种都可以,除非您是唯一开发/维护它的人,否则不要在相同的代码库中混合两者。 (2认同)
  • @Pacerier谢天谢地,PHP中唯一的重复是`die`和`exit`!查看此页面:http://php.net/manual/en/aliases.php (2认同)
  • 这应该是答案:/sf/answers/3509804931/ (2认同)

Geo*_*ale 210

原产地的差异

PHP die()exit()PHP 之间的区别在于它们的起源.


功能等同

die()并且exit()等效的功能.

PHP手册

PHP手册die:

这种语言结构相当于exit().

PHP手册exit:

注意:这种语言结构相当于die().

PHP 函数别名列表手册:

die 是主函数的别名 exit()


其他语言不同

die()并且在其他语言exit()有所不同,但在PHP中它们是相同的.

来自又一个PHP咆哮:

...作为C和Perl编码器,我准备回答:"为什么,exit()只是用数字退出状态来关闭程序,而die()将错误消息输出到stderr并以EXIT_FAILURE状态退出. " 但后来我记得我们处于混乱的PHP语法之中.

在PHP中,exit()和die()是相同的.

设计师显然认为"嗯,让我们从C借用exit().而Perl人们可能会喜欢它,如果我们也像Perl那样使用die().哎呀!我们现在有两个退出函数!让我们这样做他们俩可以将字符串或整数作为参数,使它们相同!"

最终的结果是,这并没有让事情变得"更容易",更令人困惑.C和Perl编码器将继续使用exit()仅抛出整数退出值,而die()抛出错误消息并退出失败.新手和PHP作为第一语言的人可能会想"嗯,两个退出函数,我应该使用哪一个?" 该手册没有解释为什么有exit()和die().

一般来说,PHP有很多像这样的奇怪冗余 - 它试图对来自不同语言背景的人友好,但在这样做时,它会产生令人困惑的冗余.

  • 虽然这是关于第100个答案,说明它们是相同的(在我的答案中也可以看到^^),但这确实增加了一些非常好的观点.最重要的是**它们在其他语言中并不相同**(因此首先是混乱).(1) (13认同)
  • @Pacerier:当然,如果从"谁是谁的错"这一点来看,那是绝对正确的.还有一个事实是,他们只是用几种语言表示不同的东西(没关系).从中立的角度来看,它肯定是正确的:由于不同的含义而存在混淆(即使创建两个相同的函数别名是php的错误).我绝对不想指责任何一种语言,如果这是你从我的评论中理解的...(伟大的xkcd btw(Y)^^) (2认同)
  • 这绝对应该是选择的答案,很好的描述! (2认同)
  • @ner0 其中一条评论据说是不真实的。 (2认同)

Bob*_*Bob 59

如前所述,这两个命令产生相同的解析器令牌.

这有一个很小的区别,那就是解析器返回令牌需要多长时间.

我还没有研究过PHP解析器,但是如果它是以"d"开头的一长串函数列表,以及一个以"e"开头的较短列表,则必须有一个时间惩罚查找函数名称以" E".由于如何检查整个函数名称,可能存在其他差异.

我怀疑它是可测量的,除非你有一个专门解析PHP的"完美"环境,以及许多不同参数的请求.但毕竟PHP必须有区别,因为它是一种解释型语言.

  • 而且......"死"是3个字符长,4个是"退出".所以它减少了25%的内存和文件空间!;) (23认同)
  • 正如您所写,您尚未研究过PHP解析器.感谢这个无用的答案,因为它基于您对PHP实现方式的梦想. (6认同)
  • @Timeless,完美主义者不会说"PHP是一种解释语言".PHP是一种可以根据您的服务器设置进行解释或编译的语言. (3认同)
  • '"如果它是一长串以 "d" 开头的函数,而一个较短的以 "e" 开头的函数列表,那么查找以 "e" 开头的函数的函数名肯定会有时间损失'。意味着查找以 **d** 开头的函数时会发生时间损失吗?通常,列表越大,在其中查找项目的时间越长。 (2认同)

Lev*_*ite 43

关于模具的 PHP手册:

死 - 相当于退出

你甚至可以die;用同样的方式exit;- 有或没有parens.

选择的唯一的优点die()exit(),可能是你上键入一个额外的信抽出时间;-)


Luk*_*kas 27

正如所有其他正确答案所说,die并且exit是相同/别名.

虽然我有一个个人约定,当我想在预期和期望时结束脚本的执行时,我会使用exit;.当我因为一些问题需要结束执行(无法连接到db,无法写入文件等)时,我会用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.
Run Code Online (Sandbox Code Playgroud)

当我使用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 );
Run Code Online (Sandbox Code Playgroud)

这样,当我exit在代码中的某个时刻看到时,我知道此时我想退出,因为逻辑在这里结束.当我看到die,我知道我想继续执行,但我不能或不应该由于先前执行中的错误.

当然,这仅适用于单独处理项目时.当有更多的人没有人会阻止他们使用dieexit不符合我的惯例...


Edw*_*ard 13

这是非常有趣的事情.虽然exit()并且die()是等效的,但die() 关闭连接.exit() 不关闭连接.

die():

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>
Run Code Online (Sandbox Code Playgroud)

exit():

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>
Run Code Online (Sandbox Code Playgroud)

结果:

exit():

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100
Run Code Online (Sandbox Code Playgroud)

die():

HTTP/1.1 304 Not Modified 
Connection: close
Run Code Online (Sandbox Code Playgroud)

只是需要考虑到你的项目.

致谢:https://stackoverflow.com/a/20932511/4357238

  • 刚刚测试了一下,“exit”和“die”的工作方式相同,它们都关闭连接。 (7认同)

Ped*_*ozi 11

这个页面说的die是一个alies exit,所以它们是相同的.但也解释说:

由于API清理或其他原因,有些函数更改了名称,旧名称仅作为别名保留以便向后兼容.使用这些别名通常是一个坏主意,因为它们可能会被淘汰或重命名,这将导致不可移植的脚本.

所以,叫我偏执,但die未来可能没有.

  • 它还说,*在某些情况下是多者之间没有首选名称,`is_int()`和`is_integer()`是例如同样出色.*纵观`PHP-src`提交GitHub上的历史,` die()`construct至少自1999年以来一直在PHP中,当它被转换为SVN存储库时,可能只要该语言存在就可以了.想象它会被弃用似乎很荒谬. (3认同)
  • @MarkAmery,虽然他的前提没有得出他的结论,但结论本身是有效的:〜*"叫我偏执,但将来可能没有'退出'.或者将来可能没有'死' "* (2认同)
  • @Pacerier 非常正确。未来可能没有 PHP,所以让我们都退出这个编程工作,成为殡仪员或收税员。毕竟,除了死亡和税收之外,没有什么是确定的。 (2认同)
  • 不要偏执。*退出*永远不会*死*。:) (2认同)

aag*_*kaj 9

在功能方面,它们是相同的,但是我在以下情况下使用它们以使代码可读:

出现错误时使用die(),必须停止执行。

例如 die( 'Oops! Something went wrong' );

当没有错误并且必须停止执行时,请使用exit()。

例如 exit( 'Request has been processed successfully!' );


小智 8

来自https://3v4l.org的这个输出表明die和exit在功能上是相同的. 在此输入图像描述


o.k*_*k.w 6

虽然本文另有说明,但它们基本相同.

  • 这篇文章是关于一个无法复制的基准测试,因为代码没有发布。只是忽略它。 (3认同)