Answers:
die
与错误相关的停止以及exit
所有其他方案。在阅读代码时似乎更好。
die
比exit
...起步快得多,exit
因为非PHP程序员对它的可读性更高,但die
键入时却更快。着急。另外,通过键入方式,我不必改变手的书写位置die
。
PHP手册die
:
此语言构造等效于
exit()
。
PHP手册exit
:
注意:此语言构造等效于
die()
。
PHP 函数别名列表手册:
die()
并且在其他语言exit()
中有所不同,但是在PHP中它们是相同的。
从另一个PHP咆哮:
...作为C和Perl编码器,我准备回答:“为什么exit()只是以数字退出状态来保全程序,而die()将错误消息输出到stderr并以EXIT_FAILURE状态退出。 ” 但是后来我想起我们处于PHP的混乱语法领域。
在PHP中,exit()和die()是相同的。
设计师显然认为“嗯,让我们从C借用exit()。如果我们也像从Perl一样使用die(), Perl的人们可能会喜欢它。糟糕!我们现在有两个退出函数!让我们使它们都可以将字符串或整数作为参数并使它们相同!”
最终结果是,这实际上并没有使事情变得“更轻松”,只是更加令人困惑。C和Perl编码人员将继续使用exit()仅抛弃一个整数退出值,而die()抛弃一个错误消息并以失败退出。新手和PHP作为第一语言的人们可能会想知道“嗯,两个退出函数,我应该使用哪个?” 该手册没有解释为什么会有exit()和die()。
通常,PHP具有许多这样的怪异冗余-它试图使来自不同语言背景的人变得友好,但是这样做却造成了混乱的冗余。
exit()
并没有关闭连接die()
,似乎是相关的。
如前所述,这两个命令产生相同的解析器令牌。
但
有一个小的区别,那就是解析器返回令牌需要多长时间。
我还没有研究过PHP解析器,但是如果它是一长串以“ d”开头的函数,而又是一短串以“ e”开头的函数,那么查找以“”开头的函数的函数名一定要花些时间e”。由于检查整个函数名称的方式,可能还有其他差异。
我怀疑除非您有一个专门用于解析PHP的“完美”环境以及许多具有不同参数的请求,否则它是否可以衡量。但是一定有区别,毕竟,PHP是一种解释型语言。
php -a
,,die;
并没有任何效果,而(没有分号)退出交互模式。die();
exit;
exit();
exit
正如所有其他的正确答案说,die
和exit
相同/别名。
尽管我有一个个人约定,当我希望在期望和期望的时候结束脚本的执行时,还是使用exit;
。当由于某些问题(无法连接到db,无法写入文件等)而需要结束执行时,我通常die("Something went wrong.");
会“杀死”脚本。
当我使用exit时:
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
在不符合我的约定的地方...
这是很有趣的事情。尽管exit()
和die()
等效,但die()
关闭连接。exit()
不会关闭连接。
die()
:
<?php
header('HTTP/1.1 304 Not Modified');
die();
?>
exit()
:
<?php
header('HTTP/1.1 304 Not Modified');
exit();
?>
结果:
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
万一在您的项目中需要考虑到这一点。
exit
和die
工作方式相同,他们都密切相关。
在功能方面,它们是相同的,但是我在以下情况下使用它们以使代码可读:
出现错误时使用die(),必须停止执行。
例如
die( 'Oops! Something went wrong' );
当没有错误并且必须停止执行时,请使用exit()。
例如
exit( 'Request has been processed successfully!' );
该页面说的die
是exit
,因此它们是相同的。还要说明一下:
有些函数是由于API清理或其他原因而更改了名称,而旧名称仅保留为别名,以实现向后兼容。使用这些别名通常是一个坏主意,因为它们可能会过时或重命名,这将导致脚本无法移植。
因此,称我为偏执狂,但die
将来可能不会有病。
is_int()
,is_integer()
它们同样好。查看php-src
GitHub上的提交历史die()
,至少自1999年将结构转换为SVN存储库以来,该结构就一直使用PHP,并且可能存在该语言的时间也很长。想象它将被弃用似乎是荒谬的。
exit
将来可能没有。或者将来可能没有die
。”
来自https://3v4l.org的输出证明了die和exit在功能上是相同的。
在功能上,它们是相同的。因此,选择使用哪个完全是个人喜好。在英语语义上,它们是不同的。模具听起来很消极。当我有一个将JSON数据返回到客户端并终止程序的函数时,如果我调用此函数jsonDie()可能会很糟糕,而更合适的方法是将其称为jsonExit()。因此,我总是使用exit而不是die。
据我所知,当我在这里看这个问题时
它说:“在PHP中,Header输出有明显的区别。在下面的示例中,我选择使用不同的Header,但是为了显示出exit()和die()之间的区别并不重要”,并经过测试(个人)
我在脚本中至少注意到的一点是exit()将停止当前正在执行的脚本并将控制权传递回任何调用脚本,而die将停止php。我会说那有很大的不同?
exit()函数和die()函数的结果始终相同。但是,正如别名手册页(http://php.net/manual/en/aliases.php)中所述,它说die()函数调用exit函数。我认为它像下面这样硬编码:
function die($msg){
exit($msg);
}
对于小型,中型和大型项目而言,这不是性能问题,但是如果项目具有数十亿乘以十亿乘以十亿的过程,则这会发生非常重要的性能优化状态。
但是,大多数人并不认为这是一个问题,因为如果您拥有这么多的进程,那么您必须比函数是master或alias想到更多的问题。
但是,确切的答案是:始终主控功能比别名更快。
最后; 别名手册页上说,您可能不再使用die。它只是一个别名,不建议使用。
使用这些别名通常是一个坏主意,因为它们可能会过时或重命名,这将导致脚本无法移植。提供此列表是为了帮助那些希望将其旧脚本升级为较新语法的用户。
die()
不是单独的功能。它只是的另一个名称exit()
。该答案包含有关别名及其性能的不正确陈述。
它们听起来大致相同,但是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");
?>
die
和exit
相同(它们产生相同的解析器标记(T_EXIT
),并由相同的代码执行)。如果参数是整数,它将把该代码返回给shell。如果不是,它将输出并返回0。所以die
和exit
字面上是彼此的别名。
so exit() is exit and die() is also exit :)