2012-02-02 72 views
4

的「或」關鍵字現在我有以下代碼:替代在PHP

stream_wrapper_register("var", "VariableStream") 
    or die("Failed to register protocol"); 

而且我想,以防模具的功能發生故障之前做一些額外的東西。所以它提出了這個問題:

'或'關鍵字是如何工作的?

在很多SO問題或答案,我見過的人創造一個功能,像這樣:

function doStuff() { 
    header('HTTP/1.1 500 Internal Server Error'); 
    die("Failed to register protocol"); 
} 

stream_wrapper_register("var", "VariableStream") 
    or doStuff(); 

...但是這是一種不切實際的面向對象的情況下,因爲我不真的想爲我的對象創建一個方法,我還不能使用閉包。

所以現在,我用這個代碼,但我不知道它會有完全相同的行爲

if (!stream_wrapper_register("var", "VariableStream") { 
    header('HTTP/1.1 500 Internal Server Error'); 
    die("Failed to register protocol"); 
} 
+0

爲什麼你不使用'嘗試catch'阻止? – amd 2012-02-02 14:45:51

+0

@Ahmad好,stream_wrapper_register()不會拋出異常,我不希望創建一個自己的特定情況。 – FMaz008 2012-02-02 15:21:07

回答

8

帶「or」的語句有效,因爲PHP解釋器非常智能: 因爲「或」的連接爲真,所以如果第一個爲真,它會停止執行語句一個是真的。

試想以下(PHP)代碼:

function _true() { echo "_true"; return true; } 
function _false() { echo "_false"; return false; } 

現在你可以鏈中的函數調用和查看發生了什麼輸出:

_true() or _true() or _true(); 

會告訴你只有 「_true」,因爲鏈條在第一個鏈條正確後結束,另外兩個鏈條永遠不會被執行。

_false() or _true() or _true(); 

將給出「_false_true」,因爲第一個函數返回false並且解釋器繼續。

使用相同的作品「和」

你也可以做同樣的「和」,所不同的是「和」的結束,當第一個‘假’occurres鏈:

_false() and _true() and _true(); 

會回顯「_false」,因爲結果已經完成了,不能再改變了。

_true() and _true() and _false(); 

將寫入「_true_true_false」。

因爲大部分的所有功能通過返回「1」的成功表明自己的成功和0on錯誤,你可以做的東西一樣function() or die()。 但有些功能(在PHP相當很少)返回「0」的更迭,以及!= 0,表示一個特定的錯誤。那麼你可能不得不使用function() and die()

+0

這是一個更完整的解釋,所以我沒有問題也沒關係移動檢查:) – FMaz008 2012-02-02 15:49:44

+0

@EGOrecords,請問''||工作? – Pacerier 2015-06-30 05:26:19

+0

||等於「或」,&&等於「和」,所以是的。 – EGOrecords 2015-06-30 06:09:02

2

這是完全一樣的,因爲stream_wrapper_register()返回boolean值。

+0

是否有情況「還是死亡」的可以用來處理失敗的情況下不返回假的? – FMaz008 2012-02-02 15:21:59

+0

您可以簡單地否定不返回false的情況。在這個例子中,它工作正常:'$ a = true; !$ a ||死('noes!');' – Crashspeeder 2012-02-02 16:20:10

+0

或者你使用「and die();」。閱讀是相當令人迷惑,但它的工作:) – EGOrecords 2012-02-03 09:40:20

2

這兩個語法是等價的,它只是一個編碼風格/偏好的問題,關於你使用哪一個。就個人而言,我不喜歡<statement> or die(...),因爲在大多數情況下閱讀起來似乎很難。

+0

爲什麼很難閱讀? – Pacerier 2015-06-30 05:26:53

5
a or b 

是邏輯上等同於

if (!a) { 
    b 
} 

所以您的解決方案是好的。

0

有一個 「OR」 操作符提供。 符號是||

因此,作爲一個例子,考慮:

<?php 
$count = NULL; 

if ($count == 0 || $count == NULL) { 
     echo "\nNo Value!\n"; 
     var_dump($count); 
    } else { 
     echo "\nSome Value"; 
    } 
?>