2024年PHP开发者大会日本站

die

(PHP 4, PHP 5, PHP 7, PHP 8)

dieexit() 的别名

描述

此函数是以下函数的别名:exit()

添加笔记

用户贡献笔记 5 条笔记

509
Hayley Watson
12年前
在网站中依赖die()进行错误处理是一种糟糕的设计,因为它会导致用户体验不佳:页面中断,并且——如果他们幸运的话——会收到对他们毫无帮助的错误消息。就他们而言,当页面中断时,整个网站也可能中断。

如果您希望公众使用您的网站,请始终设计它以一种允许他们尽可能继续使用它的方式来处理错误。如果这是不可能的,并且网站确实已损坏,请确保您找出原因以便您可以修复它。die() 本身无法做到这两点。

如果超市的冷冻柜坏了,想要买一桶冰淇淋的顾客不会期望被赶出大楼。
84
Damien Bezborodov
15年前
请注意,在命令行上使用PHP时,die("Error")只会将“Error”打印到STDOUT并以0的正常退出代码终止程序。

如果您希望遵循CLI程序的UNIX约定,您可以考虑以下内容

<?php
fwrite
(STDERR, "An error occurred.\n");
exit(
1); // 非0的响应代码表示失败
?>

这样,当您将STDOUT管道传输到文件时,您可以在控制台中看到错误消息,并且BASH脚本可以测试0的响应代码以判断是否成功

rc@adl-dev-01:~$ php die.php > test
An error occurred.
rc@adl-dev-01:~$ echo $?
1

理想情况下,PHP会将所有警告、致命错误等写入STDERR,但那是另一回事。
7
atesin gamil com
2年前
"... OR DIE..."

<?php
do_something
($with_this) or die ('oops!');
?>

(在PHP中,“die”实际上是“exit”的别名)

请注意,虽然这经常用作错误处理语句,但实际上并非如此……只是“或”布尔运算符被重载(短路)了

它不会抑制任何错误消息,不会防止致命错误或崩溃,也不是“try/catch”的别名,并且可能产生不可预测的结果……它只是意味着类似于以下内容

- 正常执行第一个语句 ""do_something($with_this)""
-- 如果语句结果为TRUE:无需执行第二个语句,因此跳过它
-- 否则如果返回FALSE……好吧,我不确定整个表达式的结果,所以继续执行第二个语句 ""die('cuack!')""

因此,您不能依赖所有语句都会抑制错误消息或崩溃,或者在发生错误或不良行为时始终返回“false”……

为此,最好使用错误跳过运算符“@”、“if”和“exit”命令,或者使用“try/catch”块
53
jbailey at raspberryginger dot com
17年前
die不会阻止析构函数的运行,因此脚本不会立即退出,它仍然会执行清理例程。
3
smcbride at msn dot com
3年前
我一直想知道为什么重复的命令应该存在,但是die是我知道原因的一个。它可能与exit()相同,但是当您想在源代码中搜索die()以查找未处理的错误与干净退出时,它在调试方面有所帮助。更不用说向后兼容性了,但是我们出于“良好”的原因弃用这些原因。
To Top