运算符优先级为“或”和赋值

时间:2013-04-05 13:56:04

标签: php operators assignment-operator

今天发现了一些有趣的代码片段。简化,它看起来像这样:

$var = null;

$var or $var = '123';

$var or $var = '312';

var_dump($var);

据我所知,问题是precedence of assignment is higher that OR,所以,正如我所假设的那样,var_dump应输出312(首先 - 分配,第二 - 逻辑比较)。但结果是不同的,我得到123(首先 - 检查$var是否转换为true,第二 - 如果不是,则指定值。)

问题是它是如何运作的?

为什么or||的行为相同?

2 个答案:

答案 0 :(得分:3)

相同
$var = null;

if(!$var)$var = '123';
if(!$var)$var = '321';

var_dump($var);

答案 1 :(得分:3)

您可以在Logical Operators

中查看有关此行为的示例

您也可以阅读有关Short-circuit evaluation

的文章
  

短路表达式x Sand y(使用Sand表示短路变量)等同于条件表达式if x then y else false;表达式x Sor y等效于if x then true else y

在php。

return x() and y();

等于

if (x())
  return (bool)y();
else
  return false;

return x() or y();

等于

if (x())
  return true;
else
  return (bool)y();

所以,交易不仅仅是优先权。