2011-03-13 58 views
1

我周圍挖了一點,但我似乎無法找到一個簡單的答案,爲什麼我的直覺說,你不能編寫像

<?php 
    $x=2; 
    if(1<$x<3) { 
    echo "Win!"; 
    } else { 
    echo "Lose!"; 
    } 
?> 

,由於PHP讀取左右,它評估聲明的前半部分(1<$x),然後看到< 3這是沒有意義的。我只想讓某人確認(或駁斥)出現這種情況,並且任何時候您在PHP中提供條件時都必須將每個條件分開。我不知道這是否會被稱爲邏輯或語法或別的東西,但您可以在其他上下文(如SAS)中編寫像這樣的表達式並對它們進行評估,所以我只想了解爲什麼您不能在PHP。謝謝!

+5

結轉*小於*操作是[二進制運算(http://en.wikipedia.org/wiki/Binary_operation)。 – Gumbo 2011-03-13 20:04:18

+1

另請參閱[?爲何(0 <5 <3)返回true](http://stackoverflow.com/questions/4089284/why-does-0-5-3-return-true) – BoltClock 2011-03-13 20:05:11

+1

@Gumbo:該方式無論如何,它都是在PHP和大多數其他語言中定義的。數學,Lisp和Python認爲不然。 – delnan 2011-03-13 20:08:29

回答

7

PHP評估1 < $x,那麼,爲了3結果進行比較。換句話說,如果您添加括號,PHP會將其視爲((1 < $x) < 3)

如果1 < $x爲真,則相比變得1 < 3;如果爲false,則爲0 < 3。這是由於類型轉換(從布爾到整數)。兩者評估爲真,所以if條件總是滿足的。

你確實有它這樣寫,而不是:

if (1 < $x && $x < 3) 
+0

謝謝,這是有道理的......但我實際上在使用我的示例代碼時在鍵盤上出現錯誤。所以無論這個錯誤是一個鍵盤的事情(並不會發生在實際的服務器上,其中的條件總是像你說的那樣評估爲真)......或者PHP無法處理評估我的假設條件:http:// codepad.org/E1ID4kVw – Amy 2011-03-13 20:11:41

+0

@Amy:這不是第一鍵盤的特質,我聽說過的... – BoltClock 2011-03-13 20:12:41

+1

PHP的原始解析器甚至可以不考慮''::作爲一個命名空間分隔符,你希望它處理的是* *? – Charles 2011-03-13 20:18:32

0

<>運營商計算爲布爾值。這是一個設計選擇從C.

相關問題