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

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

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

die()和exit()在其他语言中是不同的,但在php中,只需在.org/users/wwwwolf/code/phprant.html中读取这个beastwithin.org/users/wwwwwolf/code/phprant.html

exit()只是用一个数字退出状态退出程序,而die()将错误消息打印到stderr,并以exit_failure状态退出。so exit() is exit and die() is also exit :)

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

exitPHP手册:

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

diePHP手册:

This language construct is equivalent to exit().

别名允许程序员使用一个熟悉的别名。我记得退场总比死好。有些人记得死的比离开更好。

这(php.net/manual/en/aliases.php)可以解释为什么两个函数执行相同的操作

尽管他们做了同样的事情,我通常为错误相关的停止保留die,为所有其他场景保留exit。在读取代码时,它的流动性似乎更好。

很抱歉恢复了这个,但至少对我来说…die比exit快得多。我开始使用exit,因为它对非PHP编程人员更易读,但是die在你赶时间的时候打字更快。另外,在我打字的时候,我不需要改变我的手的位置来写die。

@下一步,你误用了它。用exit(0)表示成功,用exit($non_zero)表示错误。

@Marekkarbarz,不是。它只是说两个"都一样好"。

@Mauris,一个函数只有一个名称更好。假设每个PHP函数都有两个名称,这将是一个完全混乱的过程。

@我怎么会误用什么东西?你的声明只是忽略了die()甚至存在。

@下一步,我不是说你需要选择exit而不是die,或者die而不是exit。我是说,下定决心,选一个吧。任何一个都可以,不要将两者混合在同一代码库中,除非您是唯一一个开发/维护它的人。

我个人在打印错误时使用die,在控制停止后退出,就像在重定向之后。这样可以更容易地在代码中搜索错误规则。

@Alejandrov&n如果你能敏锐地感受到输入die而不是exit所带来的速度提升(我同意,就是这样),那么你应该认真考虑切换到像dvorak这样的键盘布局-我想你会很欣赏学习曲线后的加速。

@Pacerier谢天谢地,PHP中唯一的副本是die和exit!查看此页面:php.net/manual/en/aliases.php

@Mtraceur,alejandroiv&225;n说"通过我打字的方式,我不必改变手的位置来写骰子",这意味着他们可能使用dvorak或colemak,因为qwerty把i和e放在最前面一行。

原产地差异

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.

尽管这是第100个答案,说明它们是等效的(正如我的答案^ ^),但这确实增加了一些非常好的要点。最重要的是,它们在其他语言中并不相同(因此,首先是混淆)。(+ 1)

@莱维,不,不,你完全弄错了。没有人拥有名字,不同的语言以不同的方式重复使用相同的名字。这很好,因为我们不需要另一种标准的做事方式。"首先混淆"是由于PHP为一个函数分配了两个不同的名称。

@Pacrier:当然,如果你从"谁是错"的角度来看,那是绝对正确的。不过,这也是一个事实,他们只是指不同的东西在几种语言(这是可以的)。从中性的角度来看,它肯定是正确的:由于不同的含义(即使是PHP创建两个相同的函数别名的错误),所以会出现混淆。如果你从我的评论中理解的话,我肯定不想指指那些语言中的任何一种。(大xkcd btw(y)^)

这肯定是选择的答案,很好的描述!

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

但是

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

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

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

@永恒的完美主义者不会说"PHP是一种解释语言"。PHP是一种可以根据服务器设置进行解释或编译的语言。

还有……""die"是3个字符长,而"exit"是4个字符长。所以它的内存和文件空间减少了25%!;)

'如果是以"d"开头的长函数列表,以及以"e"开头的较短列表,则查找以"e"开头的函数名时必须有时间限制。你不是说从d开始查找函数时会有时间损失吗?通常,列表越大,在其中查找项目的时间就越长。

正如您所写,您还没有研究过PHP解析器。感谢这个无用的答案,因为它是基于您对如何实现PHP的梦想。

PHP模具手册:

die — Equivalent to exit

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

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

当有人从其他语言来的时候,他们是否对这两种语言都有所熟悉,这也很方便。

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

虽然我有一个个人约定,当我想在预期和期望的情况下结束脚本的执行时,我使用exit;。当我由于一些问题(无法连接到数据库、无法写入文件等)而需要结束执行时,我使用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.

当我使用模具:

$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…

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

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.

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

它还指出,在某些情况下,在多个名称中没有首选名称,例如,is_int()和is_integer()是相同的好名称。从Github上的php-src提交历史来看,die()构造至少自1999年转换为SVN存储库以来一直在PHP中,而且可能只要该语言存在就存在。想象它将永远被弃用似乎是荒谬的。

@马克梅里,虽然他的前提没有得出他的结论,但结论本身是有效的:"叫我偏执狂,但将来可能没有江户十一〔四〕"。或者未来可能没有die。

@起搏器完全正确。将来可能没有PHP,所以让我们都退出这个编程工作,成为殡仪馆或收税人。毕竟,除了死亡和税收,没有什么是确定的。

@Markamery,"未来没有PHP"似乎超过了一般的偏执狂。历史表明,疯狂流行的语言不会那么容易消失(Fortran!).

别妄想。出口永不消亡。:)

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

exit():

header('HTTP/1.1 304 Not Modified');

exit();

?>

die():

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

源URL有相反的结论:die()关闭连接,exit()不关闭。

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

这篇文章很奇怪;从扫描仪的定义可以看出它们是等效的;如果有任何不同,可能测试是在没有操作缓存的情况下运行的。

这篇文章是关于一个基准,因为代码没有发布,所以不能复制。别理它。

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

301264283b82fb40c4667fde28cef90c.png

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

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

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

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

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

使用命令行时,

die("Error");

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

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

fwrite(STDERR,"Error");

exit(1);

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

从其他来源复制错误答案没有帮助。

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

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

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

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

OP只询问有关php exit和die函数的信息。

是的,我只是回答那个问题。然而,要知道,问题不仅仅在于功能上的差异。

我最喜欢的功能之一是pd()——这意味着请死。所以我不确定在这种情况下死亡是一件坏事:)

作为一个完整的栈开发人员,我不仅把自己看作一个程序员,而且是一个用户体验设计师。在这种情况下,同情是很重要的。同情不仅影响我如何设计UI,而且影响我如何编码。

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

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.

别名不是"调用函数"。在阐述假设之前,先检查一下你的假设。

@Dolmen别名在硬代码中所有调用主函数的方法。这是一个通用的编程规则。

默尔多?别名不会调用任何内容。别名(在编程或现实生活中)只是对象的另一个名称(已经有了名称)。die()不是一个单独的函数。它只是exit()的另一个名字。此答案包含有关别名及其性能的错误语句。

docs.php.net/manual/en/…别名allways calls,如上例所示。学点东西回来。

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

这是截图:

60fbd312ee424846a1d3269fc2c109f6.png

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

@这不是真的。如果它们在子函数内部或外部,PHP脚本将始终停止。

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

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

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

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

echo"I am going to die";

exit(0);

?>

同:

die("I am going to die");

?>

那不是真的。die和exit是相同的(它们产生相同的解析器令牌(T_EXIT并由相同的代码执行)。如果参数是一个整数,它将把代码返回到shell。如果不是,则输出并返回0。因此,die和exit实际上是彼此的别名。

好吧,如果你知道你可以使用出口("我要退出…");

到目前为止,23票赞成一个简单的错误答案!这就是为什么在我读完所有与问题竞争的答案并理解所有答案之前,我从不投票给答案(除非我写得太多,没有任何意义)。

请删除答案,这是错误的。

这正是@geoffreyhale在回答中所写的。你贴出的答案是人们所期望的,来自于一种语言,比如Perl或C。但是正如其他人提到的,对于PHP来说,这不是真的。您可能真的考虑编辑您的答案来反映这一点,或者删除它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值