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

时间:2009-11-25 06:28:08

标签: php exit die

PHP中die()exit()函数之间有什么区别?

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

18 个答案:

答案 0 :(得分:511)

没有区别 - 它们是相同的。

exit的PHP手册:

  

注意:此语言构造等同于die()

die的PHP手册:

  

此语言构造等同于exit()

答案 1 :(得分:200)

ORIGIN的差异

PHP中die()exit()之间的区别在于来源


功能等同

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编码员,我准备回答:“为什么,退出()只是保释   用数字退出状态关闭程序,而die()打印出来   向stderr发送错误消息并以EXIT_FAILURE状态退出。“但是接着   我记得我们处于混乱的PHP语法之中。

     

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

     

设计师显然认为“嗯,让我们借exit() from C。而Perl   如果我们也采用die() as is from Perl,人们可能会喜欢它。   哎呀!我们现在有两个退出功能!让我们两个都做到   可以将字符串或整数作为参数并使它们相同!“

     

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

     

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

答案 2 :(得分:54)

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

BUT

存在一个小差异,即解析器返回令牌需要多长时间。

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

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

答案 3 :(得分:40)

die上的PHP手册:

  

die - 相当于退出

您甚至可以die;采用与exit;相同的方式 - 无论有没有parens。

选择die()超过exit()的唯一优势可能是您在输入额外字母时的时间; - )

答案 4 :(得分:27)

正如所有其他正确答案所说,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 :(得分:11)

This pagedieexit的化身,所以它们是相同的。但也解释说:

  

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

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

答案 6 :(得分:7)

这是非常有趣的事情。虽然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

答案 7 :(得分:6)

它们基本相同,但article提示不然。

答案 8 :(得分:6)

来自https://3v4l.org的输出表明死亡和退出在功能上是相同的。 enter image description here

答案 9 :(得分:5)

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

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

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

在没有错误的情况下使用“退出”,必须停止执行。

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

答案 10 :(得分:1)

使用命令行时,

 die("Error");

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

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

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

从命令行或shell脚本执行php脚本时,它可能很有用,并且您希望查看脚本是否以非零退出代码终止。 从Quora

复制了charanjeet的答案

答案 11 :(得分:0)

die()和exit()这两个函数彼此等效。主要区别是exit()将停止脚本,但打印输出。但是die()会直接停止脚本的执行。

答案 12 :(得分:0)

从我对这个问题的了解here

它说:“在PHP中,Header输出有明显的区别。在下面的示例中,我选择使用不同的Header,但是为了显示exit()和die()之间的区别,问题”,并进行了测试(个人)

答案 13 :(得分:-1)

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

答案 14 :(得分:-3)

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

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

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

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

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

最后; Alias manual page说,你可能不再使用死亡。它只是一个别名,不推荐使用。

  

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

答案 15 :(得分:-3)

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

以下是截图: enter image description here

答案 16 :(得分:-4)

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

答案 17 :(得分:-8)

它们听起来大致相同,但是,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");
?>