我相信所有这些(甚至die()
或die(0)
)都是相同的。如果它们不相同,哪个成功退出脚本?如果它们相同,是否有任何首选标准表示脚本成功完成?我倾向于使用exit;
。
编辑:所有答案都有“die()
和exit()
相同”,即使我在我的问题中这样说。我更新了标题,希望更清楚,这不是我的问题。我想从命令行脚本中清楚地表明成功。
答案 0 :(得分:59)
这些都是相同的。我很确定die()
只是exit()
的一个直接别名,但即使不是,它仍然可以完全相同。
当其中一个函数被赋予字符串参数时,它会在终止进程之前打印出字符串。当遇到255以下的整数时,该整数被视为进程的返回代码,该代码将被传递回调用PHP脚本的进程。这在编写命令行应用程序时非常有用(PHP不仅仅是Web!)。
就exit
,exit()
和exit(0)
之间的差异而言,确实没有。前两个之间肯定没有区别,因为exit
在技术上是一个语言结构,而不是一个函数,因此可以使用或不使用括号来调用它,就像echo
一样。返回0
的代码意味着“这个程序成功运行/没有错误”,虽然我不知道当你没有通过参数时究竟发生了什么,PHP.net说没有参数exit
表示成功,所以我敢打赌它会返回0
,但PHP.net再次显示参数的默认值。
答案 1 :(得分:6)
正如几个人所提到的,die()和exit()完全相同。
如果查看PHP documentation,参数有两个选项:
数值。这仅在您从命令行使用PHP而非Web服务器时才有用。值为零表示成功。非零表示发生了故障情况。
字符串值。退出时,这将显示在浏览器中。
我建议使用例外和自定义top-level exception handler来管理失败条件,而不是die()或exit()。
您可以更灵活地执行自动错误记录等操作。此外,如果您使用PHP实现JSON API,则此异常处理程序可以回送有效的,错误指示的JSON代码段。
答案 2 :(得分:5)
我会说,关于更好的语义die($arg);
应该用于异常或意外终止,即使当然 - 当然 - 你仍然抓住了它。并且exit($arg);
应该用于流程的正常(预期/受控)结束,例如break;
或for
或while
结构的switch
但有一个明确的目的。
尽管如此..我个人经常使用通用if { } else { }
结构来控制巨大进程的不同分支或输出缓冲,因此不必使用“退出”..
我还在简单的错误捕获语义中使用die($arg)
,如
$db = mysql_connect([$args]) or die ($error);
...
答案 3 :(得分:1)
die();
只是exit();
的同义词,功能相同。
标准方法是使用退出代码零表示成功,以及其他任何表示错误情况的内容。
答案 4 :(得分:1)
die()通常用于使用错误输出终止脚本:
die("There was a fatal error");
where-as exit通常用作成功退出(至少在我的编码中)
PHP Manual表示功能相同。
答案 5 :(得分:1)
我会被投票否决,地狱,但是在某些情况下,如果在CLI中遭到黑客入侵,我们不希望该程序被杀死,而又不想继续完整执行。
此处的目标是避免对单独的指针文件进行api调用。假设我的界面上有一个不错的播放按钮,可以执行系统调用。
示例1:程序在工作结束后被杀死,没有返回任何数据。这是不想要的。
if ($_GET["play"] != ""){
// Some job
exit;
}
/* Huge amount of data*/
示例2:程序仍在运行,将整个数据提供给GET请求。在这种情况下,这是不必要的。这正在减慢浏览器已经拥有的所有数据的速度。
if ($_GET["play"] != ""){
// Some job
}
/* Huge amount of data*/
示例3:程序仍在运行,未按预期返回任何数据,已经执行了play命令,但已解析了整个数据集,这是不必要的工作,会降低php /机器。
/* Huge amount of data*/
if ($_GET["play"] != ""){
// Some job
}
示例4:程序仍在运行,未按预期返回任何数据,已执行play命令,尚未解析整个数据,php快速返回200OK,响应为空,预期。大家开心!
if ($_GET["play"] != ""){
// Some job
goto END;
}
/* Huge amount of data*/
END;
是的!有时,最好使用GOTO-?-!
答案 6 :(得分:0)
die
完全等同于exit
。
如果status是一个整数,该值将用作退出状态..
这只有在您使用某种基于退出状态执行某些操作的包装时才有用。除非您特别需要向外界报告退出代码,否则只需exit;
。