許多 PHP 開發者曾聽聞 die() 會釋放記憶體、exit() 則不會,這其實是一個流傳已久的誤解。根據 PHP 官方手冊明確指出:die() 等同於 exit(),兩者只是別名關係,功能完全一致。
網路上許多「標準答案」錯誤地宣稱兩者在記憶體釋放機制上有差異。事實上,PHP 內核在詞法分析階段就將 die 和 exit 都轉換為同一個 Token T_EXIT(代碼 300),後續編譯與執行流程完全相同。
在 zend_language_scanner.l 中可以看到:
<ST_IN_SCRIPTING>"exit" { return T_EXIT; }
<ST_IN_SCRIPTING>"die" { return T_EXIT; }
無論遇到哪個關鍵字,掃描器都回傳 T_EXIT。也可以用 token_get_all() 驗證:
<?php
var_dump(token_get_all("<?php die; exit; ?>"));
// die 和 exit 的 token code 皆為 300
雖然功能相同,但社群慣例上有細微區分:
<?php
// 正常結束
echo "1111";
exit(0);
echo "2222"; // 不會輸出
// 錯誤處理
$fp = fopen("./readme.txt", "r") or die("無法開啟檔案");
die() 與 exit() 在 PHP 內部完全等價,沒有記憶體釋放差異。選擇哪一個純粹是程式碼可讀性與團隊習慣的問題。