exit() 與 die() 差異深度解析:參數型別與輸出行為die() 是 exit() 的別名,功能完全相同,但慣例上語意不同。關鍵在於參數為整數時不輸出到頁面,僅作為結束狀態碼;字串才會輸出。
| 呼叫方式 | CLI 模式 | Web (SAPI) 模式 | 說明 |
|---|---|---|---|
exit(0) / die(0) | 結束碼 0,無輸出 | 腳本結束,無輸出 | 成功結束慣例 |
exit(123) | 結束碼 123,無輸出 | 腳本結束,頁面空白 | 整數視為狀態碼 |
exit('123') | 輸出 "123" 到 stdout | 頁面顯示 "123" | 字串會輸出 |
die('error') | 輸出 "error" 到 stderr | 頁面顯示 "error" | 慣用於錯誤訊息 |
die(123) 網頁不顯示 123?PHP 內核判斷參數型別:
zend_exit() 只設定 EG(exit_status),不經過輸出緩衝區。php_write() 輸出字串,再結束。<?php
// 錯誤示範:頁面空白
die(123);
// 正確:輸出字串
die('123');
// 或
echo '123'; die();
?>
exit($code),$code 為 0=成功、非 0=失敗代碼,方便 Shell 判斷 $?。die('訊息') 或 exit('訊息') 顯示錯誤;正常結束直接 return 或讓腳本自然結束。header('Location: ...'); exit;(不帶參數)。exit 後的 register_shutdown_function 仍會執行<?php
register_shutdown_function(fn() => error_log('shutdown'));
exit('stop'); // 仍會寫入 log
?>