运算符“or”的优先级和赋值

Operators precedence of "or" and assignment

提问人:Timur 提问时间:4/5/2013 最后编辑:user2864740Timur 更新时间:9/20/2015 访问量:96

问:

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

$var = null;

$var or $var = '123';

$var or $var = '312';

var_dump($var);

问题是,据我所知,赋值的优先级高于 OR,因此,正如我所假设的那样,应该输出(第一个 - 赋值,第二个 - 逻辑比较)。但是结果是不确定的,我得到(第一个 - 检查是否转换为,第二个 - 如果不是,则分配值)。var_dump312123$vartrue

问题是它是如何工作的?

为什么 和 的行为是一样的?or||

php 运算符 assignment-operator

评论


答:

3赞 Narek 4/5/2013 #1

它与

$var = null;

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

var_dump($var);

评论

0赞 Timur 4/5/2013
我知道这些都是一样的。我想知道它是如何工作的
0赞 Narek 4/5/2013
它只在 语句 before 是or$var = '123';orempty/false/null/etc...
3赞 sectus 4/5/2013 #2

您可以在逻辑运算符中查看有关此行为的示例

您也可以阅读有关短路评估的文章

短路表达式(使用 Sand 表示短路变体)等价于条件表达式,该表达式等价于 。x Sand yif x then y else false;x Sor yif 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();

因此,交易不仅仅是优先权。

评论

1赞 Timur 4/5/2013
这是有道理的!谢谢!所以,原因是Short-circuit operators are, in effect, control structures rather than simple arithmetic operators