2016-07-31 74 views
5

我無法理解'和'PHP運算符的行爲。奇怪的行爲與PHP'和'運算符

下面是代碼:

$condition1 = true; 
$var2 = "var2"; 
$var3 = "var3"; 

$condition2 = $condition1 and $var2 == $var3; 

if($condition2) 
    echo '$condition1 and $var2 == $var3'; 

輸出:$條件1和$ VAR2 == $ VAR3

現在很明顯的是,由於$var2 != $var3$condition2應該是假的。因此echo聲明不應該執行,但它發生在另一種方式。任何人都可以告訴我這段代碼有什麼問題嗎?

+1

'$ condition2 =($ condition1 == true)&&($ va2 == $ var3);' –

回答

5

使用&&而不是and

and&&優先級低。聲明

$condition2 = $condition1 and $var2 == $var3;

分兩步執行由左到右。

1:$condition2 = $condition1被執行。即$condition2現在是true

2:$var2 == $var3;被執行,其執行評估但不將任何值分配給任何變量。

3

我認爲這是一個運算符優先級問題。試試這個:

$condition2 = ($condition1 and $var2 == $var3); 

我認爲這個問題是當前的代碼被這樣解釋:

($condition2 = $condition1) and ($var2 == $var3) 
+2

請參閱http://php.net/manual/en/language.operators.precedence.php優先順序(同時確認@ nad使用'&&'的方法)。 – smarx

2

試試這個 $條件2 =($條件1和$ VAR2 == $ VAR3); 或這一個 $ condition2 =($ condition1 & & $ var2 == $ var3);