2010-07-23 83 views
0
if ($var == ($var1 || $var2)) 
{ 
    ... 
} 

我正在考慮使用這個,但我確定它是否有效,並且似乎沒有檢查的地方。
從邏輯上來說,我似乎一致,但我不確定,而且我也沒有什麼可以在附近進行測試。
如果有效,其他主流語言還支持這種結構。這是否是有效的PHP語法?

編輯:比較是有效的,但不是我想的方式。
我想要做的是實際上我剛剛發現的in_array()函數。

+4

爲什麼不試試呢? – 2010-07-23 18:23:25

+0

*(tipp)*運行'php -l file.php'會欺騙你的php文件,並通知你任何錯誤。 – Gordon 2010-07-23 18:24:50

+0

@丹尼爾這並不一定意味着它很容易確定它在做什麼。我正期待用'php -l file.php'來回答這個問題,更正後的內容爲 – 2010-07-23 18:25:35

回答

8

您的代碼在語法上是有效的,但語義可能不是您想要的。

因爲$var1 || $var2是一個boolean expression始終得到真正。然後將$var與該布爾表達式的結果進行比較。所以$var總是比較truefalse而不是$var1$var2(這就是你可能已經預料到的)。所以它不是($var == $var1) || ($var == $var2)的簡寫。現在

因爲你已經注意到自己,in_array是一個解決這個問題,如果你不想寫這樣($var == $var1) || ($var == $var2)表情,尤其是當你有你要比較值的任意數目:

in_array($var, array($var1, $var2)) 

即相當於:如果您需要

($var == $var1) || ($var == $var2) 

一個strict comparison(使用===而不是==),第三個參數設置爲

in_array($var, array($var1, $var2), true) 

現在相當於:

($var === $var1) || ($var === $var2) 
+0

+1有更好的解釋。 – Sarfraz 2010-07-23 18:40:27

2

是,修正後的版本是有效的語法:

if ($var == ($var1 || $var2)) 

的問題是,這是什麼意思?

它會將表達式($var1 || $var2)的結果(將爲布爾值)與值$var進行比較。

而且,如上所述,php -l file.php會告訴你是否有任何語法錯誤。

編輯:

考慮一下:

$var1 = 1; 
$var2 = 2; 

echo var_dump(($var1 || $var2)); 

結果是:

bool(true) 
+0

。所以它是有效的? – chustar 2010-07-23 18:24:48

+0

@chustar是的,它是有效的。但它不同於'if($ var == $ var1 || $ var == $ var2)' – cbednarski 2010-07-23 18:47:07

0

您可以使用命令PHP -l filename.php通過命令行來檢查語法錯誤。

0

正如George Marian所說,它缺少一個右括號,因此會引發語法錯誤。然而,它是有效的,所以我不能看出它是你不確定的邏輯OR構造本身。它用於幾種語言,包括javascript。

0

您更正的示例是有效的,並且將爲TRUE是$ var是TRUE並且$ var1或$ var2是TRUE ..或。如果$ var,$ var1和$ var2全都是FALSE