“或”的运算符优先级和赋值
Posted
技术标签:
【中文标题】“或”的运算符优先级和赋值【英文标题】:Operators precedence of "or" and assignment 【发布时间】:2013-03-27 23:31:15 【问题描述】:今天发现了一些有趣的代码sn-p。简化后如下所示:
$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
和||
的行为相同?
【问题讨论】:
【参考方案1】:您可以在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();
所以,交易不只是优先。
【讨论】:
有道理!谢谢!所以,原因是Short-circuit operators are, in effect, control structures rather than simple arithmetic operators
【参考方案2】:
同理
$var = null;
if(!$var)$var = '123';
if(!$var)$var = '321';
var_dump($var);
【讨论】:
我知道这些是一样的。我想知道它是如何工作的 只有当or
之前的语句是empty/false/null/etc...
时,它才会在or
(在你的情况下是$var = '123';
)之后执行字符串以上是关于“或”的运算符优先级和赋值的主要内容,如果未能解决你的问题,请参考以下文章