2012-11-02 54 views
0

在PHP中,如果有一個條件是這樣的:檢查數值和比較值是否符合條件&&?

if (is_numeric($my_var) && $my_var == 1) { 

} 

如果第一部分,如果是假的,沒有第二部分($my_var == 1)得到過執行?

謝謝!

+0

不,它不是,這是你的「懶惰評價」 - http:// en。wikipedia.org/wiki/Lazy_evaluation –

回答

2

在您的示例$my_var == 1不會被執行(如果它不是數字)。 PHP會確定第一部分的計算結果爲false,所以在執行第二部分時沒有任何好處,因爲您使用的是AND運算符。

一個例子:

if(isset($_GET['something']) && $_GET['something'] == '1') 
{ 

} 

如果查詢字符串變量something缺少那麼它不檢查它是否等於1。如果確實如此,它可能會產生一個Undefined index通知。

您也可以驗證此行爲的東西,如:

$test = '2'; 
if($test == '1' && die('dead')) 
{ 

} 

echo 'execution continues....'; 

設置$test = '2'die()不會停止執行。將其設置爲1並且模具將執行並停止,因此您將不會看到Execution continues...

編輯:有一些通用的information here(不是PHP特定的)。

+0

你能指出文檔來支持這一點嗎(在更好的答案中,證據支持答案)?我看了一下PHP手冊的操作符部分,但我找不到任何有關此行爲的參考。 – Quentin

+0

@Quentin我也找不到參考,如果有人有一個,然後隨意把它扔進答案。 – MrCode

0

您可以像使用

if (is_numeric($my_var)) { 

    if($my_var == 1) 
     { 
      // your code 
     } 
} 
+0

我知道我可以做到這一點。我想知道如果我這樣做PHP的另一種方式。 –

1

如果第一個條件是false如果您使用&&,則第二個條件將不會執行。您可以自己嘗試:

function a(){ 
echo 'a'; 
return true; 
} 

function b(){ 
echo 'b'; 
return true; 
} 

if (a() && b()) 
{ 
    //do something 
} 

這將輸出:ab

function a(){ 
echo 'a'; 
return false; 
} 

function b(){ 
echo 'b'; 
return true; 
} 

if (a() && b()) 
{ 
    //do something 
} 

輸出a

我給你這個例子,因爲我無法找到任何文檔,但是這被稱爲this section

第一評的call-by-需要懶惰評估

注:在某些情況下,儘管第一個條件狀態,第二個函數仍然執行是有用的或必要的。在這種情況下,您可以使用& operator。使用按位運算符可以使用數字,而不是使用布爾值。因爲PHP解釋器應該知道,這兩個值之前和之後&運營商將執行兩種功能(a() & b())和truefalse被評估爲10,分別1 & 0 => 0將作爲falseif聲明進行評估。