“die”和“exit”的区别

15

可能是重复问题:
PHP中die()和exit()有什么区别?

我完全不清楚dieexit的区别。

大多数程序员使用die,像这样:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');  //don't see mysql_* problem it is just example
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

使用exit的方式如下:

$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
   or exit("unable to open file ($filename)");

根据它们的功能,我认为它们没有任何区别,因为两者都终止了脚本的执行。
我的问题是:
1)我可以在这些示例中交换die和exit吗?反之亦然? 2)还有这些之间的区别。
干杯...

正如@AdamPlocher所说,它们是一样的。使用你最喜欢的那个。 - Peon
1
我实际上只看到它们被反过来使用... "or die(..)" 等等 :) 但是像我说的,没有区别。 - eis
1
MySQL函数将被弃用,请使用PDO或mysqli。 - GAURAV MAHALE
5个回答

17
根据Die,它等同于exit。因此,是的,你可以互换使用它们。

谢谢您的回答。但是您能告诉我为什么PHP语言开发人员创建了这两个函数吗?我们可以在任何地方使用exit - Yogesh Suthar
1
也许 die 函数调用是为了让 Perl 程序员感到亲切。 - asprin
2
@YogeshSuthar PHP充满了这样的别名。其中一些是计划好的,但我认为大部分都不是。随着时间的推移,它只是在不断地演变和变化,有些比其他人更糟糕。 - eis
8
die 别名也可以创造出有趣的代码行,例如 comply() or die(); - user244343
2
@darvids0n enter_the_dragon() 或 exit(); ;) - Prasanth

13

在使用命令行时,

die("Error");

将会在STDOUT中打印"Error"并以错误代码0退出。

如果你想用错误代码1退出,你需要:

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

在使用命令行或shell脚本执行php脚本时,如果您想查看脚本是否以非零退出代码终止,这将是有用的。

这是我能想到的一个区别。

注:以上信息来自php.net/exit


1
+1 找到至少一个不同之处。 - Yogesh Suthar
3
两个函数本质上没有区别,只是人们通常使用带有消息的 die 和带有退出码的 exit - ThiefMaster
1
+1 给 ThiefMaster。你可以将最后一行改为 die(1); 而不会影响其行为。 - nssmart

8
die()和exit()函数是相同的,它们的功能和使用方法都一样。虽然如此,为什么PHP还要保留这两个函数呢?实际上,这两个函数是别名(alias)。为了维护API和向后兼容性,PHP才会保留这两种称呼。
除了die()和exit()函数之外,在PHP中有许多函数可以用多种名称进行调用。在某些情况下,这些名称中没有首选名称,例如is_int()和is_integer()二者都可以使用。但是有些函数由于API清理或其他原因而更改了名称,旧名称只作为向后兼容性的别名保留。使用这类别名通常是不明智的,因为它们可能与过时或更名绑定,从而导致脚本无法移植。以下链接提供了完整的别名函数列表:http://php.net/manual/en/aliases.php。希望这可以帮助您 :)

如果您引用了已弃用的别名,请包含示例。 - MatBailie

5

5

die函数将参数输出到STDOUT,而不是STDERR(您可以使用grep或2>/dev/null来测试它)。 die函数将返回0作为Shell的退出代码,但是exit函数可以返回其他代码。 让我们定义PHP中die函数的完全等效:

function mydie($str){
  echo $str.PHP_EOL;
  exit(0);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接