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

程序结束的时间是否有任何内在差异,我应该知道它之后的代码吗?等等

更新

我主要是在问,它是否是一种编码风格,或者是否有真正的原因导致某些编码方式与另一种方式不同。我不是在问exitdie 之间的区别是什么。

【问题讨论】:

我真的觉得这没什么好关心的 我认为这是一个错误,php 允许您以多种方式执行此操作。别担心。 @Frits:不是bug,是故意行为,类似于可以使用printecho @Frits 不,这不是任何合理定义的错误。 @Frits 哈哈,你不能是认真的。通用语言有无数种方法可以做同样的事情。这就是重点。我猜1 + 1 == 1 - -1 充满错误的任何语言。 【参考方案1】:

来自 php 手册:

注意:这种语言结构等价于 die()。

但是dieexit还是有区别的:

使用 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 的方式是个人喜好问题。正如我所说,它们是相同的。出于上面列出的原因,我会选择第二个选项:更短、更清晰、更干净,在我看来这相当于“更好”。

exitdie 之间的区别在于 exit 允许您返回非零状态,而 die 返回 0。这两个函数都不是“更好”,它们的用途不同。

【讨论】:

活得快,早死,留下漂亮的日志文件。 这可能与即将到来的机器人启示录有关。更快的终止开关总是有用的! =D @meagar,这又引出了另一个问题。是先做echo 然后exit 还是先做echo 然后再做die @Neal 实际上它提出另一个问题。你误用了“begs the question”这个词。 @meager。好的。 begs the questionraises 是什么意思?没关系,还有一个问题。【参考方案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!"); 因为输出可能会回显到浏览器,这在调试中很好,但在生产中不行。是的,您最好对此进行配置。 无论如何,你不应该在生产代码中成为dieing。 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无关;您可以使用任何一系列语句编写&lt;statement#1&gt; or &lt;statement#2&gt;,这不是die 特有的语言功能。还在我尚未评论的答案中评论 @meagar 不起作用。 也没有“catch/die”序列;这只是简单的旧short-circuit evaluation。 请原谅我的简单术语。【参考方案7】:

没有区别。

既然你死了,为什么还要要求速度差异。

【讨论】:

嗯,一种可能会很慢很痛苦,而另一种可能又快又容易,我知道什么?

以上是关于echo('exit'); 和有啥区别?死;和死('退出');?的主要内容,如果未能解决你的问题,请参考以下文章

javascript函数中的()和有啥区别? [复制]

`|_| 和有啥区别?异步移动 ` 和 `异步移动 |_| `

< 和有啥区别?扩展基础> 和 <T 扩展基础>?

HashSet理解为什么jdk1.7中的头插法会形成环和死循环?

php无bom和有bom的文件编码有啥区别

exit() 和 abort() 有啥区别?