【问题标题】: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 充满错误的任何语言。

标签: php echo exit die


【解决方案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】:

      没有区别。

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

      【讨论】:

      • 嗯,一种可能会很慢很痛苦,而另一种可能又快又容易,我知道什么?
      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 2012-09-24
      • 2010-09-28
      • 2016-12-08
      • 2015-07-22
      • 2014-10-08
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多