exit,exit(),exit(0),die(),die(0) - 如何退出脚本

时间:2011-11-07 01:38:41

标签: php

我相信所有这些(甚至die()die(0))都是相同的。如果它们不相同,哪个成功退出脚本?如果它们相同,是否有任何首选标准表示脚本成功完成?我倾向于使用exit;

编辑:所有答案都有“die()exit()相同”,即使我在我的问题中这样说。我更新了标题,希望更清楚,这不是我的问题。我想从命令行脚本中清楚地表明成功。

7 个答案:

答案 0 :(得分:59)

这些都是相同的。我很确定die()只是exit()的一个直接别名,但即使不是,它仍然可以完全相同。

当其中一个函数被赋予字符串参数时,它会在终止进程之前打印出字符串。当遇到255以下的整数时,该整数被视为进程的返回代码,该代码将被传递回调用PHP脚本的进程。这在编写命令行应用程序时非常有用(PHP不仅仅是Web!)。

exitexit()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;forwhile结构的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-?-!

https://www.php.net/manual/en/control-structures.goto.php

https://i.stack.imgur.com/kQnqC.png

答案 6 :(得分:0)

die完全等同于exit

From the manual

  

如果status是一个整数,该值将用作退出状态..

这只有在您使用某种基于退出状态执行某些操作的包装时才有用。除非您特别需要向外界报告退出代码,否则只需exit;