PHP Conference Japan 2024

die

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

dieexit() 的別名

說明

此函式是 exit() 的別名。

新增註記

使用者提供的註記 5 則註記

Hayley Watson
12 年前
依靠 die() 進行網站錯誤處理是不良的設計,因為它會導致網站使用者體驗不佳:頁面損壞,而且如果幸運的話,會出現對他們毫無幫助的錯誤訊息。就他們而言,當頁面損壞時,整個網站也可能損壞。

如果您希望大眾使用您的網站,請務必將其設計為能夠處理錯誤,並盡可能讓使用者繼續使用。如果網站真的故障了,請務必找出問題所在並修復它。單純使用 die() 無法做到這兩點。

如果超市的冷凍櫃壞了,想買冰淇淋的顧客並不會期望被趕出超市。
Damien Bezborodov
15 年前
請注意,在命令列使用 PHP 時,die("Error") 只會將 "Error" 輸出到 STDOUT,並以正常的 0 結束程式碼終止程式。

如果您希望遵循 UNIX CLI 程式的慣例,可以考慮以下做法

<?php
fwrite
(STDERR, "發生錯誤。\n");
exit(
1); // 非 0 的回應碼表示失敗
?>

這樣一來,當您將 STDOUT 導向至檔案時,您可以在控制台中看到錯誤訊息,而 BASH 腳本可以測試回應碼是否為 0 來判斷是否成功

rc@adl-dev-01:~$ php die.php > test
發生錯誤。
rc@adl-dev-01:~$ echo $?
1

理想情況下,PHP 會將所有警告、致命錯誤等寫入 STDERR,但那是另一回事了。
atesin gamil com
2 年前
"... OR DIE..."

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

(在 PHP 中,「die」實際上是「exit」的別名)

請注意,雖然這經常被用作錯誤處理語句,但實際上並非如此... 它只是「or」布林運算子的重載(短路求值)。

它不會抑制任何錯誤訊息,也不會防止致命錯誤或程式當機,它不是「try/catch」的別名,而且可能會有不可預測的結果... 它的意思類似於這樣

- 正常執行第一個語句 ""do_something($with_this)""
-- 如果語句結果為 TRUE:則無需執行第二個語句,因此跳過它
-- 否則,如果返回 FALSE... 我不確定整個表達式的結果,因此繼續執行第二個語句 ""die('cuack!)""

因此,您不能依賴所有語句都會抑制錯誤訊息或程式當機,或者在發生錯誤或不良行為時總是返回「false」...

為此,最好使用錯誤抑制運算子「@」、「if」和「exit」指令,或使用「try/catch」區塊
jbailey at raspberryginger dot com
17 年前
die 不會阻止解構函數的執行,因此腳本不會立即退出,它仍然會執行清理程序。
smcbride at msn dot com
3 年前
我總是思考為什麼要存在重複的指令,但 `die()` 就是其中一個我知道原因的例子。它可能和 `exit()` 一樣,但是當你想在原始碼中搜尋 `die()` 來查找未處理的錯誤,而不是正常的 `exit()` 時,它對除錯會有些幫助。更不用說向後相容性了,但我們基於「正當」的理由不建議再使用這些舊方法。
To Top