2015-01-11 12 views
5

Ich habe einige überraschende Ergebnisse mit OR als logisches ODER in PHP.
Betrachtet man den folgenden Code:PHP ODER überraschendes Verhalten

$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 

Warum Test 1 und Test 2 unterschiedliche Ergebnisse liefern, auch wenn sie die gleiche logische Operation zu tun?

Antwort

4

Der Operator || und der Operator OR verhalten sich nicht gleich. Sie können nicht austauschbar verwendet werden.

Wenn Sie wollen || Verhalten, dann verwenden Sie es. Verwenden Sie nicht OR, außer Sie sind in einer Situation, in der || die falsche Sache tun würde.

Wie für Ihre Situation, diese beiden Zeilen Code verhalten wird genau das gleiche:

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

Mit anderen Worten, ist der Code im Grunde nur:

$value = $a; 

Wenn Sie den || Operator verwendet , dann sind diese beiden identisch, als ob Sie Klammern wie folgt hätten:

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

Für Weitere Informationen: http://php.net/manual/en/language.operators.precedence.php

+0

total, ich würde es hassen, in einer Welt zu leben, in der 'OR' und' '|| sind die gleiche Sache –

+1

Diese Antwort müssen Sie den Link: http://php.net/manual/en /language.operators.precedence.php – sectus

+0

@sectus danke. Erledigt. –

0

Wenn Sie Test 1 in Klammern wickeln, wird es wie erwartet verhalten:

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

Wenn Sie var_dump auf Test 2 ausführen, können Sie das erwartete Ergebnis erhalten, weil Var_dump wird die Operation in Klammern Einwickeln .

Es ist in der Regel eine gute Idee, eine Operation in Klammern zu schreiben, insbesondere mit variabler Zuweisung.

Auch das Schlüsselwort "ODER" und "||" Verhalten Sie sich nicht auf die gleiche Weise. Siehe Dokumentation hier: http://php.net/manual/en/language.operators.logical.php

+0

Natürlich nicht! –

Verwandte Themen