我对die
和exit
的区别感到困惑。
大多数程序员都这样使用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)在这些例子中,我可以与退出交换模具,反之亦然吗?
2)这些也有区别。
干杯...
答案 0 :(得分:17)
根据Die,它等同于退出。所以是的,你可以互换它们。
答案 1 :(得分:13)
使用命令行时,
die("Error");
将STDOUT
打印为“错误”并退出,错误代码为0
。
如果您想退出错误代码1
,则必须:
fwrite(STDERR, "Error");
exit(1);
从命令行或shell脚本执行php脚本时,它可能很有用,并且您希望查看脚本是否以非零退出代码终止。
这是我能想到的一个区别。
P.S。以上信息来自php.net/exit
答案 2 :(得分:9)
die()和exit()函数之间没有区别。它们都是相同的,并且工作原理相同。
再一个问题是为什么php保持这两个功能,如果它们是相同的。这两个函数都是彼此函数的别名。
由于API和保持向后兼容性,两个函数都保持不变。
这是另一个例子:
is_int()和is_integer()也相同。
PHP中有很多函数可以使用多个名称调用。在某些情况下,多个名称中没有首选名称,例如is_int()和is_integer()同样好。但是,由于API清理或其他原因,有些函数会更改名称,旧名称仅作为别名保留以便向后兼容。使用这些别名通常是一个坏主意,因为它们可能会被淘汰或重命名,这将导致不可移植的脚本。提供此列表是为了帮助那些想要将旧脚本升级为更新语法的人。
您可以在以下网址找到的别名功能的完整列表:
http://php.net/manual/en/aliases.php
这可以帮助你:)
答案 3 :(得分:6)
die
是exit
函数的别名。
php中有许多函数别名,因为语言的演变,演变和克服 - http://www.php.net/manual/en/aliases.php。
答案 4 :(得分:5)
die打印到STDOUT的参数,而不是STDERR(grep或2> / dev / null将帮助你测试它) die返回shell退出代码为0,但exit可以返回其他代码 让我们在PHP中定义完全模拟:
function mydie($str){
echo $str.PHP_EOL;
exit(0);
}