2012-07-15 46 views
7

眼看exit()PHP documentation讓我思考:爲什麼如果/其他與/或在PHP退出?

$filename = '/path/to/data-file'; 
$file = fopen($filename, 'r') 
or exit("unable to open file ($filename)"); 

夫婦的問題:

  1. 什麼是除了打開文件使用exit()常見的使用情況?
  2. 由於並非每個人都會寫的每個功能都以exit()結尾,您如何知道在某些情況下與其他人一起使用?
  3. if/elseor/exit是否可以互換?
+4

他們使用'或exit'因爲你正在看'退出'的例子。 – Gumbo 2012-07-15 21:33:14

+0

@Gumbo,我編輯了我的問題以刪除您引用的問題#3的非感性部分。 – 2012-07-15 21:41:01

回答

3

在這方面,or在該聲明是一個PHP的logical operators這就像在使用時,如果將且僅當第一個因short circuit evaluation未能執行第二條語句。

由於fopen返回false,所以or exit語句從第一部分失敗開始執行。

要更好地理解它,下面是對短路評估的快速說明。

$x = 5; 
$y = 42; 

if ($x == 5 or $y == 42) { 
    echo "x or y is true"; 
} 

在上面的代碼中,表達$y == 42從未評估,因爲沒有必要,因爲第一個表達式是真實的。

在該示例中,他們使用相同的邏輯來決定是否評估調用exit的語句。

爲了解決你的問題:

  1. 打開一個文件時,我不會用退出失敗,除非該計劃是非常具體的。更好的做法是記錄一個錯誤,然後將錯誤返回給調用者,以便他們可以決定要做什麼。
  2. 何時使用exit完全取決於您正在編寫的代碼。
  3. 給出關於短路的解釋,是的,它們在這個意義上是可以互換的。使用or exit比使用if/else短一點。

希望有所幫助。

+0

- @ drew010,好東西,謝謝! – 2012-07-15 21:43:51

1

我會說你使用exit在你的代碼無法繼續,如果你正在做的功能失敗的情況。例如讀取需要的文件。

+0

根據手冊''死 - 等同於退出''。 'exit'描述: '終止腳本的執行。即使退出被調用,關閉函數和對象析構函數也會一直執行。' – 2012-07-15 21:42:44

+0

lol ok我的壞:)一定是在某處讀過錯了。 – 2012-07-15 21:43:43

2

我傾向於完全避免使用exit(),因爲從用戶的角度來看,這是一種非常難看的方式來處理錯誤。

如果您必須使用它,任何不可恢復的錯誤將成爲候選人。例如,數據庫查詢或連接失敗,或遠程請求失敗。

if/else相當於...or whatever()。這只是一種風格的東西,後者的形式更簡潔。

4
  1. CLI腳本,出口可以採取被反饋到控制檯的整數參數以指示成功或某種形式的錯誤
  2. 的我不傾向於使用在應用程序代碼exit()die(),由於例外是首選。但是,我個人認爲你可能會稍微複雜一些......它會殺死腳本執行,因此在需要殺死腳本時使用它。實際上,我通常只在調試時(一次性斷點)殺死腳本,而且這也不理想(再次異常做得更好)。
  3. 使用or大多是方便的。這裏有一個有趣的問題,但...

爲什麼

$resource = mysql_connect() || die('dead') 

不行?

答案是=運營商優先於or,以便首先完成分配:($resource = mysql_connect()) or die()。在這種情況下,它完全像做if(!($resource = mysql_connnect())) { die() }

+0

- @ damiand,謝謝我剛剛學會了很多! – 2012-07-15 21:45:42