2014-01-23 61 views
0

我已經注意到,如果第一個參數爲true,PHP不會運行'if語句'的第二個或其他參數。PHP如果語句不看第二個參數,如果第一個有效

if($this->sessions->remove("registered_id") or $this->sessions->remove("user_id")){ 
     echo "you have logged out"; 
}else { 
     echo "wth?"; 
} 

這個我怎麼用if。此處還有會話類的刪除功能。

public function remove($key){ 
     if(isset($_SESSION[$key])){ 
      unset($_SESSION[$key]); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

,我想要做的事情是同時運行此參數。我希望我可以告訴這個問題..的

+0

所以你想運行'if'和'else'? – putvande

+0

http://en.wikipedia.org/wiki/Short-circuit_evaluation – Phil

+0

不,我想同時刪除registered_id和user_id,而不使用另一個之內的if .. – Yusuf

回答

4

您需要執行這兩個函數,存儲它們各自的結果,然後測試這些結果。

$resultA = $this->sessions->remove("registered_id"); 
$resultB = $this->sessions->remove("user_id"); 

if ($resultA or $resultB) 
{ 
    … 

它的設計在於第二條語句沒有執行,因爲它的結果是不相關的。

2

如果其他參數你指的是第二個條件,然後使用,而是的OR

如果其他參數表示else,則改爲使用單獨的if語句。

編輯

如果你想同時執行語句,使用位運算符,看看這個手​​冊: http://www.php.net/manual/en/language.operators.bitwise.php

喜歡的東西:

if(a | b){ 

} 

將執行兩a和b,但仍然是'或'比較。

+0

但它的registered_id可能爲空。然後我需要使用或..你不明白我在說什麼.. – Yusuf

+0

好吧,對不起,我不明白你最初想做什麼。我已經編輯了這篇文章,希望你在找什麼。 (按位獨佔或) – Coderchu

+0

使用按位運算符來防止短路基本上只是在稍後讓自己感到迷惑。 :P如果你想評估這兩個表達式,那麼簡單地將它們分別寫成單獨的語句。 – cHao

1

該結果是預期的。這是logical operators做的。

您將需要使用&&and實現你彷彿在尋找:

if ($this->sessions->remove("registered_id") && $this->sessions->remove("user_id")) { 

這是爲什麼:

&&and關鍵字意味着所有的評估必須返回true。所以:

if ($a && $b) { 
    // $a and $b must both be true 
    // if $a is false, the value of $b is not even checked 
} 

||or關鍵字意味着要麼評價必須返回true。所以:

if ($a || $b) { 
    // Either $a or $b must be true 
    // If $a is false, the parser continues to see if $b might still be true 
    // If $a is true, $b is not evaluated, as our check is already satisfied 
} 
你的情況

所以,如果$this->sessions->remove("registered_id")成功地做到了這一點,該$this->sessions->remove("user_id")不會被調用,因爲我們的檢查已經滿足第一次調用的結果。

相關問題