簡體   English   中英

exit,exit(),exit(0),die(),die(0) - 如何退出腳本

[英]exit, exit(), exit(0), die(), die(0) - How to exit script

我相信所有這些(甚至die()die(0) )是相同的。 如果它們不相同,哪個成功退出腳本? 如果它們相同,是否有任何首選標准表示腳本成功完成? 我傾向於使用exit;

編輯:所有的答案都有“ die()exit()是相同的”,即使我在我的問題中說。 我更新了標題,希望更清楚,這不是我的問題。 我想從命令行腳本中清楚地表明成功。

這些都是相同的。 我很確定die()只是exit()一個直接別名,但即使它不是,它仍然是相同的。

當其中一個函數被賦予字符串參數時,它會在終止進程之前打印出該字符串。 當遇到255以下的整數時,該整數被視為進程的返回代碼,該代碼將被傳遞回調用PHP腳本的進程。 這在編寫命令行應用程序時非常有用(PHP不是僅限Web的!)。

至於exitexit()exit(0)之間的區別,確實沒有。 前兩個之間肯定沒有區別,因為exit在技​​術上是一個語言結構,而不是一個函數,因此可以使用或不使用括號來調用,就像echo一樣。 返回0代碼意味着“這個程序成功運行/沒有錯誤”,雖然我不知道當你沒有傳遞參數時究竟發生了什么,但是PHP.net說沒有參數的exit表示成功,所以我會打賭它會返回0 ,但PHP.net再次沒有顯示參數的默認值。

正如幾個人所提到的,die()和exit()完全相同。

如果查看PHP文檔 ,參數有兩個選項:

  • 一個數值。 這僅在您從命令行使用PHP而非Web服務器時才有用。 值為零表示成功。 非零表示發生了故障情況。

  • 字符串值。 退出時,這將顯示給瀏覽器。

我建議使用異常和自定義頂級異常處理程序來管理失敗條件,而不是die()或exit()。

您可以更靈活地執行自動錯誤記錄等操作。 此外,如果您使用PHP實現JSON API,則此異常處理程序可以回送有效的,錯誤指示的JSON代碼段。

我會說,關於更好的語義die($arg); 應該用於異常或意外終止,即使當然 - 你仍然抓住它。 exit($arg); 應該用於進程的正常(預期/控制)結束,例如break; for forwhileswitch結構但具有明確的結束。

然而..我個人經常使用一般if { } else { }結構來控制巨大進程的不同分支或輸出緩沖,因此不必使用“exit”。

我也使用die($arg)來處理簡單的錯誤捕獲語義

$db = mysql_connect([$args]) or die ($error); ...

die(); 只是exit();的同義詞exit(); 並且在功能上是相同的。

標准方法是使用退出代碼零表示成功,以及其他任何表示錯誤條件的方法。

die()通常用於使用錯誤輸出來終止腳本:

die("There was a fatal error");

where-as exit通常用作成功退出(至少在我的編碼中)

PHP手冊說功能是相同的。

我會陷入地獄 ,但在某些情況下,當我們在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,有時候被認為是最好的做 - 🔨 - !

https://www.php.net/manual/en/control-structures.goto.php

https://i.stack.imgur.com/kQnqC.png

die完全等同於exit

從手冊

如果status是整數,則該值將用作退出狀態。

這僅在您使用某種基於退出狀態執行某些操作的包裝時才有用。 除非您特別需要向外界報告退出代碼,否則只需exit;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM