[英]exit, exit(), exit(0), die(), die(0) - How to exit script
我相信所有這些(甚至die()
或die(0)
)是相同的。 如果它們不相同,哪個成功退出腳本? 如果它們相同,是否有任何首選標准表示腳本成功完成? 我傾向於使用exit;
。
編輯:所有的答案都有“ die()
和exit()
是相同的”,即使我在我的問題中說。 我更新了標題,希望更清楚,這不是我的問題。 我想從命令行腳本中清楚地表明成功。
這些都是相同的。 我很確定die()
只是exit()
一個直接別名,但即使它不是,它仍然是相同的。
當其中一個函數被賦予字符串參數時,它會在終止進程之前打印出該字符串。 當遇到255以下的整數時,該整數被視為進程的返回代碼,該代碼將被傳遞回調用PHP腳本的進程。 這在編寫命令行應用程序時非常有用(PHP不是僅限Web的!)。
至於exit
, exit()
和exit(0)
之間的區別,確實沒有。 前兩個之間肯定沒有區別,因為exit
在技術上是一個語言結構,而不是一個函數,因此可以使用或不使用括號來調用,就像echo
一樣。 返回0
代碼意味着“這個程序成功運行/沒有錯誤”,雖然我不知道當你沒有傳遞參數時究竟發生了什么,但是PHP.net說沒有參數的exit
表示成功,所以我會打賭它會返回0
,但PHP.net再次沒有顯示參數的默認值。
我會說,關於更好的語義die($arg);
應該用於異常或意外終止,即使當然 - 你仍然抓住它。 並exit($arg);
應該用於進程的正常(預期/控制)結束,例如break;
for for
或while
或switch
結構但具有明確的結束。
然而..我個人經常使用一般if { } else { }
結構來控制巨大進程的不同分支或輸出緩沖,因此不必使用“exit”。
我也使用die($arg)
來處理簡單的錯誤捕獲語義
$db = mysql_connect([$args]) or die ($error);
...
die();
只是exit();
的同義詞exit();
並且在功能上是相同的。
標准方法是使用退出代碼零表示成功,以及其他任何表示錯誤條件的方法。
我會陷入地獄 ,但在某些情況下,當我們在CLI中進行黑客攻擊時,我們不希望程序被殺,而不想繼續完全執行。
這里的目標是避免對單獨的手點文件進行api調用。 假設我的界面中有一個很好的播放按鈕,可以執行系統調用。
示例1: 程序在作業后被殺死 ,沒有返回數據。 這不是想要的。
if ($_GET["play"] != ""){
// Some job
exit;
}
/* Huge amount of data*/
示例2: 程序仍在運行 ,在GET請求中提供整個數據。 在這種情況下,這是不必要的。 這會使瀏覽器的所有數據變慢,這已經是他已經存在的。
if ($_GET["play"] != ""){
// Some job
}
/* Huge amount of data*/
示例3: 程序仍然運行 ,沒有按預期返回數據,播放命令已執行,但整個數據集被解析,這是不必要的工作,可以減慢php /機器。
/* Huge amount of data*/
if ($_GET["play"] != ""){
// Some job
}
示例4: 程序仍然運行 ,沒有按預期返回數據,播放命令已執行,整個數據尚未解析,php以超級快速返回200OK,響應為空,如預期。 大家開心!
if ($_GET["play"] != ""){
// Some job
goto END;
}
/* Huge amount of data*/
END;
是! 使用GOTO,有時候被認為是最好的做 - 🔨 - !
die
完全等同於exit
。
從手冊 :
如果status是整數,則該值將用作退出狀態。
這僅在您使用某種基於退出狀態執行某些操作的包裝時才有用。 除非您特別需要向外界報告退出代碼,否則只需exit;
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.