php 脚本末尾是不是需要 die() 或 exit() 函数?
Posted
技术标签:
【中文标题】php 脚本末尾是不是需要 die() 或 exit() 函数?【英文标题】: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()?
【问题讨论】:
没有。当脚本到达结尾时,它无论如何都会退出。 阅读:***.com/questions/1795025/… 只有在有人对你的脚本的返回码感兴趣时才有用,比如你在 shell 环境中使用它时。对于大多数用途,特别是在 Web 服务器上生成内容,根据下面的答案,这不是必需的。 【参考方案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_error
或error_log
在您的error.log 中记录测试。然后检查一下。
【讨论】:
请解释为什么不推荐它,如果可能的话,请提供它的来源。【参考方案8】:来自文档:
https://secure.php.net/function.mysql-connect服务器的链接将在执行后立即关闭 脚本结束,除非它通过显式调用提前关闭 mysql_close().
【讨论】:
【参考方案9】:不,如果你有另一个代码要运行,你不需要调用 die() 或 exit(0,就像你的 HTML 代码一样
【讨论】:
以上是关于php 脚本末尾是不是需要 die() 或 exit() 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Go 中实现 PHP 函数 `die()`(或 `exit()`)?