首页 文章

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

提问于
浏览
608

PHPdie()exit() 函数之间有什么区别?

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

17 回答

  • 6

    据我所知,当我看到这个问题here

    它说“在PHP中,Header输出有明显的区别 . 在下面的例子中,我选择使用不同的 Headers 但是为了显示exit()和die()之间的区别并不重要”,并经过测试(个人)

  • 187

    它们听起来大致相同,但是,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");
    ?>
    
  • -2

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

    有一点不同,那就是解析器返回令牌需要多长时间 .

    我还没有研究过PHP解析器,但是如果它是以“d”开头的一长串函数列表,以及以“e”开头的较短列表,那么查找以“是”开头的函数的函数名必须有时间惩罚 . E” . 由于如何检查整个函数名称,可能还存在其他差异 .

    我怀疑它是可测量的,除非你有一个专门解析PHP的“完美”环境,以及许多不同参数的请求 . 但是必定存在差异,毕竟PHP是一种解释型语言 .

  • 6

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

    PHP手册exit

    注意:这种语言结构相当于die() .

    PHP手册die

    此语言构造等同于exit() .

  • -1

    正如所有其他正确答案所述, dieexit 是相同/别名 .

    虽然我有一个个人约定,当我想在预期和期望时结束脚本的执行时,我使用 exit; . 当我因为一些问题(无法写入文件等)而需要结束执行时,我使用 die("Something went wrong."); 来编写脚本"kill" .

    当我使用退出时:

    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.
    

    当我使用die:

    $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 时,我知道我'd like to continue execution, but I can' t或者不应该由于先前执行中的错误 .

    当然,这仅适用于单独处理项目时 . 当有更多的人没有人会阻止他们使用 dieexit 它不适合我的约定...

  • -9

    使用命令行时,

    die("Error");
    

    将打印到“错误”到STDOUT并退出,错误代码为0 .

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

    fwrite(STDERR, "Error");
        exit(1);
    

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

  • 26

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

    出现错误时使用“die”并且必须停止执行 .

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

    没有错误时使用“exit”并且必须停止执行 .

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

  • 1

    exit()函数和die()函数的结果总是相同的 . 但正如别名手册页(http://php.net/manual/en/aliases.php)中所述,它说die()函数调用exit函数 . 我认为它的硬编码如下:

    function die($msg){
      exit($msg);
    }
    

    对于小型,中型和大型项目而言,这不是性能问题,但如果项目有数十亿乘以数十亿倍的数十亿个进程,则会发生非常重要的性能优化状态 .

    但是大多数人并不认为这是一个问题,因为如果你有那么多进程,你必须考虑比函数是主函数还是别名更多的问题 .

    但是,确切的答案是;总的来说,master函数比别名更快 .

    最后; Alias manual page说,你可能不再使用死亡 . 它只是一个别名,不推荐使用 .

    使用这些别名通常是一个坏主意,因为它们可能会被淘汰或重命名,这将导致不可移植的脚本 . 提供此列表是为了帮助那些想要将旧脚本升级为更新语法的用户 .

  • 5

    这是非常有趣的事情 . 虽然 exit()die() 是等价的, exit() closes 连接 . die() doesn't close 连接 .

    exit()

    <?php
        header('HTTP/1.1 304 Not Modified');
        exit();
    ?>
    

    die()

    <?php
        header('HTTP/1.1 304 Not Modified');
        die();
    ?>
    

    Results:

    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

  • -3

    起源不同

    PHP中die()exit()之间的区别在于它们 origin .


    FUNCTIONALLY EQUIVALENT

    die()exit()equivalent functions.

    PHP手册

    PHP手册die

    此语言构造等同于exit() .

    PHP手册exit

    注意:这种语言结构相当于die() .

    PHP手册List of Function Aliases

    die是主函数exit()的别名


    其他语言不同

    die()exit()different in other languages 但在PHP中它们是相同的 .

    Yet another PHP rant

    ...作为C和Perl编码器,我准备回答:“为什么,exit()只是用数字退出状态来关闭程序,而die()将错误信息打印到stderr并以EXIT_FAILURE状态退出“ . 但后来我记得我们处于混乱的PHP语法之中 . 在PHP中,exit()和die()是相同的 . 设计师显然认为“嗯,让我们从C中借用exit() . 如果我们从Perl那里采取die(),Perl人们可能会喜欢它 . 糟糕!我们现在有两个退出函数!让我们这样做他们俩可以将字符串或整数作为参数,使它们相同!“最终的结果是,这并没有让事情变得“更容易”,更令人困惑 . C和Perl编码器将继续使用exit()仅抛出整数退出值,而die()抛出错误消息并退出失败 . 新手和PHP作为第一语言的人可能会想“嗯,两个退出函数,我应该使用哪一个?”手册没有解释为什么有exit()和die() . 一般来说,PHP有很多像这样的奇怪冗余 - 它试图对来自不同语言背景的人友好,但在这样做时,它会产生令人困惑的冗余 .

  • 1

    在功能上,它们是相同的 . 因此,选择使用哪一个完全是个人偏好 . 在语义上用英语表示,它们是不同的 . 死听起来很消极 . 当我有一个函数将JSON数据返回给客户端并终止程序时,如果我调用这个函数jsonDie()可能会很糟糕,并且更适合将其称为jsonExit() . 出于这个原因,我总是使用退出而不是死 .

  • -4

    我在脚本中至少注意到的一点是,exit()将停止当前正在执行的脚本并将控制权传递回任何调用脚本,而die将在其轨道中停止php . 我会说这是一个很大的区别?

  • 0

    This pagedieexit 的属性,所以它们是相同的 . 但也解释说:

    由于API清理或其他原因,有些函数更改了名称,旧名称仅作为别名保留,以实现向后兼容 . 使用这些别名通常是一个坏主意,因为它们可能会被淘汰或重命名,这将导致不可移植的脚本 .

    所以,叫我偏执,但将来可能没有 die .

  • 500

    它们本质上是相同的,尽管这是另外的建议 .

  • 39

    来自https://3v4l.org的此输出表明模具和出口在功能上是相同的 .
    enter image description here

  • 10

    在w3schools测验:die()和exit()函数完全相同吗?我的回答是假的 . 这是错误的答案 . 正确的答案是对的 .

    这是截图:
    enter image description here

  • 51

    关于die的PHP手册:

    die - 相当于退出

    您甚至可以像 exit; 一样 die; - 有或没有parens .

    选择 die() 超过 exit() 的唯一好处,可能是您在输入额外信件时的时间;-)

相关问题