提问人:Timur 提问时间:4/5/2013 最后编辑:user2864740Timur 更新时间:9/20/2015 访问量:96
运算符“or”的优先级和赋值
Operators precedence of "or" and assignment
问:
今天发现了一些有趣的代码片段。简化后,它看起来像这样:
$var = null;
$var or $var = '123';
$var or $var = '312';
var_dump($var);
问题是,据我所知,赋值的优先级高于 OR
,因此,正如我所假设的那样,应该输出(第一个 - 赋值,第二个 - 逻辑比较)。但是结果是不确定的,我得到(第一个 - 检查是否转换为,第二个 - 如果不是,则分配值)。var_dump
312
123
$var
true
问题是它是如何工作的?
为什么 和 的行为是一样的?or
||
答:
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';
or
empty/false/null/etc...
3赞
sectus
4/5/2013
#2
您可以在逻辑运算符中查看有关此行为的示例
您也可以阅读有关短路评估的文章
短路表达式(使用 Sand 表示短路变体)等价于条件表达式,该表达式等价于 。
x Sand y
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();
因此,交易不仅仅是优先权。
评论
1赞
Timur
4/5/2013
这是有道理的!谢谢!所以,原因是Short-circuit operators are, in effect, control structures rather than simple arithmetic operators
上一个:这个 =+ 作业是怎么回事?
下一个:需要确切地知道此代码中发生了什么
评论