为什么评估这两个php表达式的结果不同?

时间:2013-08-03 14:22:43

标签: php expression

$bBoolVal = ((6 < 5) Or (13 - 6 > 0));
if ($bBoolVal)  echo 'makes sense'; else echo 'makes no sense';

结果:“有道理”

$bBoolVal = (6 < 5) Or (13 - 6 > 0);
if ($bBoolVal)  echo 'makes sense'; else echo 'makes no sense';

结果:“毫无意义”

好像'='比'或'更紧密 - 肯定不是?

5 个答案:

答案 0 :(得分:1)

根据PHP中的运算符优先级,行为是正确的。

http://php.net/manual/en/language.operators.precedence.php

'&&', '||'的优先级高于'=',但'='的优先级高于“and', 'or'

答案 1 :(得分:0)

  

好像'='比'或'更紧密 - 肯定不是?

确实如此。

以OR开头并首先评估右侧:赋值的返回值为false。整个表达式的值为true,但您只检查分配给$bBoolVal的内容。

答案 2 :(得分:0)

检查operator precedence

使用||代替or使其绑定比=更紧密。

答案 3 :(得分:0)

您的其他形式的代码:

$bBoolVal = ((false) Or (true)); //true
if ($bBoolVal)  echo 'makes sense'; 
else echo 'makes no sense';



$bBoolVal = (false) Or (true); //false
(($bBoolVal  = false) or true) //equivalent expression which is false

if ($bBoolVal)  echo 'makes sense'; 
else echo 'makes no sense';

答案 4 :(得分:0)

是的,=具有更高的优先级。在php手册中经常可以看到一个熟悉的利用这种机制的例子:

$result = mysql_query($sql) or die(mysql_error());

就像

一样
$result = mysql_query($sql);
if (!$result) die(mysql_error());