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

What are the differences in die() and exit() in PHP?

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

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


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

exitPHP手册:

Note: This language construct is equivalent to die().

diePHP手册:

This language construct is equivalent to exit().


原产地差异

php中die()exit()的区别是它们的起源。

  • exit()来自c中的exit()
  • die()来自于perl中的die

功能等效

die()exit()是等价函数。

手册

diePHP手册:

This language construct is equivalent to exit().

exitPHP手册:

Note: This language construct is equivalent to die().

函数别名列表的PHP手册:

die is an alias for master function exit()

其他语言不同

die()exit()在其他语言中是不同的,但在php中是相同的。

从另一个PHP咆哮:

...As a C and Perl coder, I was ready to answer,"Why, exit() just bails
off the program with a numeric exit status, while die() prints out the
error message to stderr and exits with EXIT_FAILURE status." But then
I remembered we're in messy-syntax-land of PHP.

In PHP, exit() and die() are identical.

The designers obviously thought"Hmm, let's borrow exit() from C. And Perl
folks probably will like it if we take die() as is from Perl too.
Oops! We have two exit functions now! Let's make it so that they both
can take a string or integer as an argument and make them identical!"

The end result is that this didn't really make things any"easier",
just more confusing. C and Perl coders will continue to use exit() to
toss an integer exit value only, and die() to toss an error message
and exit with a failure. Newbies and PHP-as-a-first-language people
will probably wonder"umm, two exit functions, which one should I
use?" The manual doesn't explain why there's exit() and die().

In general, PHP has a lot of weird redundancy like this - it tries to
be friendly to people who come from different language backgrounds,
but while doing so, it creates confusing redundancy.


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

但是

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

我还没有研究过PHP解析器,但是如果它是一个以"d"开头的长函数列表,以及以"e"开头的短列表,那么查找以"e"开头的函数名肯定会有时间损失。由于检查整个函数名的方式不同,也可能存在其他差异。

我怀疑它是可以测量的,除非您有一个专门用于解析PHP的"完美"环境,以及许多具有不同参数的请求。但肯定有区别,毕竟,PHP是一种解释语言。


PHP模具手册:

die — Equivalent to exit

你甚至可以用和exit;一样的方法来做die;,有或没有parens。

选择die()而不是exit()的唯一优势可能是你花时间打一封额外的信;-)


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

虽然我有一个个人约定,当我想在预期和期望的情况下结束脚本的执行时,我使用exit;。当我由于一些问题(无法连接到数据库、无法写入文件等)而需要结束执行时,我使用die("Something went wrong.");来"终止"脚本。

当我使用出口时:

1
2
3
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.

当我使用模具:

1
2
3
4
5
$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


这页说dieexit的一个分支,所以它们是相同的。但同时也解释了:

there are functions which changed names because of an API cleanup or some other reason and the old names are only kept as aliases for backward compatibility. It is usually a bad idea to use these kind of aliases, as they may be bound to obsolescence or renaming, which will lead to unportable script.

所以,叫我偏执狂吧,但将来可能没有江户病。


这里有一些很有趣的东西。虽然exit()die()是等效的,但exit()关闭了连接。die()不关闭连接。

exit()

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

die()

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

结果:

exit()

1
2
3
HTTP/1.1 304 Not Modified
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100

die()

1
2
HTTP/1.1 304 Not Modified
Connection: close

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

学分:https://stackoverflow.com/a/20932511/4357238


它们本质上是相同的,尽管本文另有建议。


https://3v4l.org的输出表明die和exit在功能上是相同的。enter image description here


功能方面,它们是相同的,但我在以下场景中使用它们来使代码可读:

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

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

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

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


使用命令行时,

1
 die("Error");

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

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

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

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


从我在这里看到这个问题时所知道的

它说"在PHP中,头输出有明显的区别。在下面的示例中,我选择使用不同的头,但为了显示exit()和die()之间的区别,这并不重要",并进行了测试(个人)


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


在功能上,它们是相同的。所以选择使用哪一个完全是个人的偏好。在英语的语义上,它们是不同的。死亡听起来很消极。当我有一个函数将JSON数据返回给客户机并终止程序时,如果我调用这个函数jsondie()可能会很糟糕,并且更适合调用它jsonexit()。因为这个原因,我总是用出口代替死亡。


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

1
2
3
function die($msg){
  exit($msg);
}

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

但大多数人并不认为这是一个问题,因为如果你有那么多的进程,你必须比函数是master或alias考虑的问题更多。

但是,确切的答案是:allways master函数比alias更快。

最后,别名手册页上说,您可能不再使用die。它只是一个别名,已弃用。

It is usually a bad idea to use these kind of aliases, as they may be
bound to obsolescence or renaming, which will lead to unportable
script. This list is provided to help those who want to upgrade their
old scripts to newer syntax.


在W3学校测验中:die()和exit()函数的作用完全相同?我的回答是错误的。回答不正确。正确的答案是正确的。

这是截图:enter image description here


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


它们听起来差不多,但是exit()还允许您设置PHP脚本的退出代码。

通常情况下,您不需要这样做,但是在编写控制台PHP脚本时,您可能需要检查一下,例如bash,脚本是否以正确的方式完成了所有工作。

然后您可以使用exit()并在稍后捕获它。但是die()不支持。

die()始终存在,代码为0。因此,实际上,die()命令执行以下操作:

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

同:

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