2015-01-11 97 views
5

我有一些令人驚訝的結果使用OR作爲邏輯或在PHP中。
考慮下面的代碼:PHP OR令人驚訝的行爲

$a = false; 
$b = false; 
$c = true; 

# Test 1, using OR and assigning to a variable 
$value = $a OR $b OR $c; 
var_dump($value); 
# return bool(false) but why? 

# Test 2, using OR directly in var_dump 
var_dump($a OR $b OR $c); 
# return bool(true) as expected 

# Test 3, using || and assigning to a variable 
$value = $a || $b || $c; 
var_dump($value); 
# return bool(true) as expected 

# Test 4, using || directly in var_dump 
var_dump($a || $b || $c); 
# return bool(true) as expected 

爲什麼測試1和測試2給出不同的結果,即使他們做同樣的邏輯操作?

回答

4

||運營商和OR運營商不表現相同。它們不能互換使用。

如果你想||的行爲,然後使用它。請勿使用OR,除非您處於||會做錯事情的情況。

至於你的情況來看,這兩行代碼的行爲如出一轍:

$value = $a OR $b OR $c; 
($value = $a) OR $b OR $c; 

換句話說,你的代碼基本上是:

$value = $a; 

如果您使用的||操作,那麼這兩個是相同的,就好像你有這樣的大括號:

$value = $a || $b || $c; 
$value = ($a || $b || $c); 

For更多詳細信息:http://php.net/manual/en/language.operators.precedence.php

+0

完全,我不想生活在一個世界裏'或'和''||是同一回事 –

+1

這個答案需要鏈接:http://php.net/manual/en /language.operators.precedence.php – sectus

+0

@sectus謝謝。完成。 –

0

如果你裹測試1括號中,它會像預期的那樣:

$value = ($a OR $b OR $c); 

當您在測試2運行的var_dump,你會得到預期的結果,因爲的var_dump被包裹在括號中的操作。

將括號中的操作換成括號通常是一個好主意,特別是對於變量賦值。

此外,「OR」關鍵字和「||」不要以同樣的方式行事。在這裏看到的文檔: http://php.net/manual/en/language.operators.logical.php

+0

當然他們不! –

相關問題