【问题标题】:Is the die() or exit() function needed in the end of a php script?php 脚本末尾是否需要 die() 或 exit() 函数?
【发布时间】:2014-01-03 18:48:03
【问题描述】:

在 php 脚本中我有一些测试,在脚本之后是 html 页面。

当测试失败时,我调用 die("Test 1 failed"); 如果没有测试失败,则 php 脚本到达末尾?> 然后在 php 脚本之后加载 html 代码。

这是一个好的程序吗?或者我需要在php脚本结束之前写die()或者exit()?

【问题讨论】:

  • 没有。当脚本到达结尾时,它无论如何都会退出。
  • 只有在有人对你的脚本的返回码感兴趣时才有用,比如你在 shell 环境中使用它时。对于大多数用途,特别是在 Web 服务器上生成内容,根据下面的答案,这不是必需的。

标签: php


【解决方案1】:

不,你不必写,这是不是最佳实践。如果脚本在没有致命错误的情况下到达末尾,它将退出。

如果这对你来说意味着“测试”,那你就错了。应使用unit tests 进行测试。对于 php,有 phpunit。试一试,这是测试代码的正确方法。

编辑:正如 CompuChip 在评论中所说,退出的唯一有用用例是当您编写应返回错误代码的基于 php 的 shell 脚本时。 See the parameter section of the documentation for the exit() function.

【讨论】:

  • 为了测试我的意思是我将用户注册到数据库。如果某件事失败了,那就是失败的测试。
  • 这可以而且应该通过单元测试进行测试。您“测试”的方式是调试,而不是测试。而不是“死亡”,您的脚本应该向用户传递正确的错误消息,而不仅仅是“杀死”脚本。
【解决方案2】:

不,您不需要,但是在编写控制台 PHP 脚本时,您可能需要检查例如 Bash,如果脚本以正确的方式完成了所有操作。那是你使用 exit() 或 die() 的时候

【讨论】:

    【解决方案3】:

    php 脚本末尾是否需要 die() 或 exit() 函数?

    不,PHP 将结束脚本本身。如果脚本是包含文件(从另一个文件调用),那么它将结束包含文件中的脚本,然后在包含的位置之后继续原始文件中的任何代码(如果有任何代码)。

    因此,您可以将die()exit() 放在您想要或需要的地方。

    对于测试,请将其放在您测试的每个代码块之后。如果我只是想让 PHP 向我展示一些东西然后停止,我会在测试的某些部分使用它们,例如打印出一个数组以确保它的构造正确等。
    例如:

    print_r($array);
    exit();
    

    对于其他代码测试,我有时只是在 if/else 中回显“A 部分有效”等。如果我想知道代码的特定部分是否正常工作,或者是否满足某些标准(基本上,它可以让您跟踪 PHP 本身在代码中的位置)。

    说了这么多,不要在生产代码中使用die()exit()。您应该使用更友好和受控的消息传递设置。出于安全原因和视觉考虑,您可能会向他们提供一些信息,例如“错误无法加载SomethingSecret”。此外,当您仅加载一半页面然后在屏幕上显示错误消息时,它看起来并不漂亮,这可能对最终用户没有任何意义。

    阅读以下内容:
    PHP Error handling: die() Vs trigger_error() Vs throw Exception

    【讨论】:

      【解决方案4】:

      不,您不必在脚本末尾使用这些函数,因为它无论如何都存在于脚本末尾。

      【讨论】:

        【解决方案5】:

        您不应该在生产 PHP 脚本中使用 die()exit,除非在非常特殊的情况下。相反,重新设计您的代码路径以简单地向用户显示错误消息,而不是提前退出脚本。

        【讨论】:

          【解决方案6】:

          无需在 scipt 末尾放置骰子或退出。 但是您可以使用 exit 来终止您的脚本,并使用特定的退出代码(默认为 0)。

          例如

          $ php -r "/* does nothing */;"
          $ echo $?
          0
          $ php -r "exit(123);"
          $ echo $?
          123
          

          http://php.net/exit

          【讨论】:

            【解决方案7】:

            不! 这个不推荐使用

            使用trigger_errorerror_log 在您的error.log 中记录测试。然后检查一下。

            【讨论】:

            • 请解释为什么不推荐它,如果可能的话,请提供它的来源。
            【解决方案8】:

            来自文档:

            服务器的链接将在执行后立即关闭 脚本结束,除非它通过显式调用提前关闭 mysql_close().

            【讨论】:

              【解决方案9】:

              不,如果你有另一个代码要运行,你不需要调用 die() 或 exit(0,就像你的 HTML 代码一样

              【讨论】:

                猜你喜欢
                • 2021-10-20
                • 2022-09-23
                • 2023-03-11
                • 1970-01-01
                • 1970-01-01
                • 2013-08-11
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多