提问



PHPdie()exit()函数之间有什么区别?


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

最佳参考


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


exit的PHP手册:[58]



  注意:这种语言结构相当于die()[59]



die的PHP手册:[60]



  这种语言结构相当于exit()[61]


其它参考1


起源差异



PHP中die()exit()之间的区别是起源[62] [63]



  • exit()来自 C
  • 中的exit()
  • die()来自 Perl
  • 中的die





功能等同



die()exit()等效函数。 [64] [65] [66] [67] [68] [69]


PHP手册



PHP手册die:[70]



  这种语言结构相当于exit()[71]



PHP手册exit:[72]



  注意:这种语言结构相当于die()[73]



PHP函数别名列表手册:[74]



  die是主函数的别名exit() [75] [76]






其他语言不同



die()exit()在其他语言中不同但在PHP中它们是相同的。[77] [78]


来自又一个PHP咆哮:[79]



  ......作为一名C和Perl编码员,我准备回答:为什么,退出()只是保释
  用数字退出状态关闭程序,而die()打印出来
  错误信息发送到stderr并以EXIT_FAILURE状态退出。但是接着
  我记得我们处于混乱的PHP语法之中。

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

  
  设计师显然认为嗯,让我们从C.和Perl借用exit()
  如果我们从Perl那里采取die(),人们可能会喜欢它。
  哎呀!我们现在有两个退出功能!让我们这样做他们俩
  可以将字符串或整数作为参数并使它们相同![80] [81]

  
  最终的结果是,这并没有让任何事情变得更容易,
  更令人困惑的是。 C和Perl编码器将继续使用exit()来
  只输出一个整数退出值,而die()则抛出一条错误信息
  并以失败退出。新手和PHP-as-a-first-language people
  可能会想嗯,两个退出功能,哪一个应该我
  使用?手册没有解释为什么有exit()和die()。

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


其它参考2


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





有一点不同,那就是解析器返回令牌需要多长时间。


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


我怀疑它是可测量的,除非你有一个专门解析php的完美环境,以及许多不同参数的请求。
但是必定存在差异,毕竟PHP是一种解释型语言。

其它参考3


关于模具的PHP手册:[82]



  死 - 相当于退出



你甚至可以exit; exit;的方式[[有或没有parens]]。


选择die()而不是exit()的唯一优势可能是您在输入额外字母时可以节省的时间;-)

其它参考4


正如所有其他正确答案所说,dieexit是相同的/别名。


虽然我有一个个人约定,当我想在预期和期望时结束脚本的执行时,我使用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.


当我使用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 );


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


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

其它参考5


这个页面说dieexit的属性,所以它们是相同的。但也解释说:[83]



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



所以,称我为偏执狂,但将来可能没有die

其它参考6


虽然本文另有说明,但它们基本相同。 [84]

其它参考7


来自https://3v4l.org的输出表明die和exit在功能上是相同的。
[85] [86]

其它参考8


使用命令行时,


 die("Error");


将打印到错误到STDOUT并退出,错误代码为0。


如果要退出错误代码1,则必须:


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


从命令行或shell脚本执行php脚本时,它可能很有用,并且您希望查看脚本是否以非零退出代码终止。
从Quora复制了charanjeet的答案[87]

其它参考9


这是非常有趣的事情。尽管exit()die()是等价的,exit() 关闭连接。die() 不会关闭连接。


exit():


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


die():


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





结果:


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


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


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

其它参考10


试着看看这个问题:链接
die()和exit()之间有一点不同
die()将关闭Apache的连接或你用于服务器的连接,并退出()而不是

其它参考11


据我所知,我在这里看到这个问题


它说在PHP中,Header输出有明显的区别。在下面的例子中,我选择使用不同的标题,但为了显示exit()和die()之间的区别并不重要,并经过测试(个人)

其它参考12


在功能上,它们是相同的。因此,选择使用哪一个完全是个人偏好。在语义上用英语表示,它们是不同的。死听起来很消极。当我有一个函数将JSON数据返回给客户端并终止程序时,如果我调用这个函数jsonDie()可能会很糟糕,并且更适合将其称为jsonExit()。出于这个原因,我总是使用退出而不是死。

其它参考13


exit()函数和die()函数的结果总是相同的。但正如别名手册页(http://php.net/manual/en/aliases.php)中所解释的那样,它说die()函数调用exit函数。我认为它的硬编码如下:[91]


function die($msg){
  exit($msg);
}


对于小型,中型和大型项目而言,这不是性能问题,但如果项目有数十亿乘以数十亿倍的数十亿个进程,则会发生非常重要的性能优化状态。


但是大多数人都不认为这是一个问题,因为如果你有那么多的过程,你必须考虑比函数是主或别名更多的问题。


但是,确切的答案是;总的来说,master函数比别名更快。


最后; Alias手册页说,你可能不再使用die了。它只是一个别名,它已被弃用。[92]



  使用这些别名通常是个坏主意,因为它们可能是这样
  必然会过时或重命名,这将导致不可移植
  脚本。此列表旨在帮助那些想要升级他们的人
  旧脚本到更新的语法。


其它参考14


在w3schools测验:
die()和exit()函数完全相同吗?
我的回答是假的。这是错误的答案。
正确的答案是对的。


这是截图:
[93]

其它参考15


我在脚本中至少注意到的一点是,exit()将停止当前正在执行的脚本并将控制权传递回任何调用脚本,而die将在其轨道中停止php。我会说这是一个很大的区别?

其它参考16


它们听起来大致相同,但是,exit()还允许您设置PHP脚本的退出代码。


通常你真的不需要这个,但是在编写控制台PHP脚本时,如果脚本以正确的方式完成所有操作,你可能想要检查Bash。


然后你可以使用exit()并在以后捕获它。
Die()然而不支持。


Die()始终存在,代码为0。
所以基本上die()命令执行以下操作:


<?php
echo "I am going to die";
exit(0);
?>


这与:


<?php
die("I am going to die");
?>