echo('exit'); 和有啥区别?死;和死('退出');?
Posted
技术标签:
【中文标题】echo(\'exit\'); 和有啥区别?死;和死(\'退出\');?【英文标题】:What is the difference between echo('exit'); die; and die('exit');?echo('exit'); 和有什么区别?死;和死('退出');? 【发布时间】:2011-08-15 01:31:58 【问题描述】:我见过一些代码这样做:
if(something)
echo 'exit from program';
die;
...more code
以及其他只使用die
的人:
if(something) die('exit from program');
...more code
程序结束的时间是否有任何内在差异,我应该知道它之后的代码吗?等等
更新
我主要是在问,它是否是一种编码风格,或者是否有真正的原因导致某些编码方式与另一种方式不同。我不是在问exit
和die
之间的区别是什么。
【问题讨论】:
我真的觉得这没什么好关心的 我认为这是一个错误,php 允许您以多种方式执行此操作。别担心。 @Frits:不是bug,是故意行为,类似于可以使用print
或echo
@Frits 不,这不是任何合理定义的错误。
@Frits 哈哈,你不能是认真的。通用语言有无数种方法可以做同样的事情。这就是重点。我猜1 + 1 == 1 - -1
充满错误的任何语言。
【参考方案1】:
来自 php 手册:
注意:这种语言结构等价于 die()。
但是die和exit还是有区别的:
使用 die() 你可以发布一个字符串: die("An error occurred");
使用 exit() 的结果相同
<?php
echo("An error occurred <br>");
exit(0);
?>
或者如果你是 cli 或 unix shell:
在命令行上使用 PHP,die("An error occurred") 简单地将“An error occurred”打印到 STDOUT 并以正常退出代码 0 终止程序。
<?php
fwrite(STDERR, "An error occurred \n");
exit(0); //
?>
【讨论】:
【参考方案2】:不,没有区别;他们都会将"exit"
写入STDOUT 并终止程序。
我更喜欢die("exit")
方法,因为它打字更少,更容易注释掉并且语义更清晰。
就“速度”而言,您为什么要关心哪个更快?你需要你的程序很快死掉吗?
RE:您的更新
...结束程序的任何固有差异...
有没有区别,固有的或其他的。它们是相同的。第二个选项die('exit')
是单个语句,因此与if
语句一起使用时不需要大括号;这与 die
无关,与 C 风格语言中的块和流控制有关。
RE:您的评论/第二次更新
您die
的方式是个人喜好问题。正如我所说,它们是相同的。出于上面列出的原因,我会选择第二个选项:更短、更清晰、更干净,在我看来这相当于“更好”。
exit
和 die
之间的区别在于 exit
允许您返回非零状态,而 die
返回 0。这两个函数都不是“更好”,它们的用途不同。
【讨论】:
活得快,早死,留下漂亮的日志文件。 这可能与即将到来的机器人启示录有关。更快的终止开关总是有用的! =D @meagar,这又引出了另一个问题。是先做echo
然后exit
还是先做echo
然后再做die
?
@Neal 实际上它提出另一个问题。你误用了“begs the question”这个词。
@meager。好的。 begs the question
与 raises
是什么意思?没关系,还有一个问题。【参考方案3】:
主要是编码风格。但是,如果您要输出调试消息,则 echo then die 更好:
echo "The frobnuticator blew up!";
die;
变成
//echo "The frobnusticator blew up!";
die;
当然,你很可能有
if ($debug) echo "The frobnusticator blew up!";
die;
这比(我的|)眼睛更容易
die($debug?"The frobnusticator blew up!":"");
【讨论】:
嗯?你为什么不能这样做:die("The frobnusticator blew up!");
因为输出可能会回显到浏览器,这在调试中很好,但在生产中不行。是的,您最好对此进行配置。
无论如何,你不应该在生产代码中成为die
ing。 die
就像 assert
- 当您测试的东西已经足够好以将代码推出到生产环境时,您的代码应该无法达到 die
语句。
非常正确;然而,即使是最好的代码也会在生产中遇到问题——例如,你可能会因为磁盘满而死机。但我并没有试图解决死亡与其他事物,只是两种形式的死亡【参考方案4】:
至少根据 PHP 手册,语言结构 exit()
和 die()
是等价的。当应该到达该行并且我希望脚本在该点停止时,我使用 exit()。另一方面, Die() 用于不应该发生的情况。这对我来说是最自然的,你不必同意。
【讨论】:
【参考方案5】:对于您发布的具体示例,它们是相等的,因为 $status
是一个字符串,但正如 the manual 所说,情况可能并非总是如此:
如果status是一个字符串,这个函数 打印退出前的状态。
如果status是一个整数,那个值 将用作退出状态和 未打印。退出状态应该是 在 0 到 254 范围内,退出状态 255 由 PHP 保留,不应 使用。状态 0 用于 成功终止程序。
所以如果你想输出 'exit from program'
而不是 42
你真的需要这样做:
echo 42; die();
【讨论】:
我不能die(42);
?那不会做任何事?结果会怎样?
@Neal:我没有说它不会做任何事情,但肯定不会是echo我>'ed!如果您执行die(42)
,则执行以退出状态 42 结束,这主要在 CLI(命令行界面)环境中有用。只是要寻找一些东西,因为如果你不小心,你可能会在脚上开枪(例如,如果你这样做mysql_query('...') or die(mysql_errno())
)。
@Alix 我的印象是只有exit(42)
这样做,而die
总是以0
退出
@Neal:不,他们是别名:die — Equivalent to exit()
,见ideone.com/f7E0F。 =)
@Alix 这很奇怪。不知道【参考方案6】:
伙计们,情况有所不同。 DIE() 可以与其他可失败的函数一起使用,而回显则需要作为错误或异常来捕获。
$query = mysql_query("SELECT * FROM tablename") OR DIE(mysql_error());
为您提供即时捕获/死亡序列。
【讨论】:
$query = mysql_query("SELECT * FROM tablename") OR exit(mysql_error());
也可以。 Die() 和 exit() 是等价的。
@Neal 这与die
无关;您可以使用任何一系列语句编写<statement#1> or <statement#2>
,这不是die
特有的语言功能。还在我尚未评论的答案中评论 @meagar
不起作用。
也没有“catch/die”序列;这只是简单的旧short-circuit evaluation。
请原谅我的简单术语。【参考方案7】:
没有区别。
既然你死了,为什么还要要求速度差异。
【讨论】:
嗯,一种可能会很慢很痛苦,而另一种可能又快又容易,我知道什么?以上是关于echo('exit'); 和有啥区别?死;和死('退出');?的主要内容,如果未能解决你的问题,请参考以下文章
`|_| 和有啥区别?异步移动 ` 和 `异步移动 |_| `