今天发现一些有趣的代码片段。简化后,它看起来像这样:
$var = null;
$var or $var = '123';
$var or $var = '312';
var_dump($var);
问题是,据我所知,分配的优先级高于OR http://www.php.net/manual/en/language.operators.precedence.php,所以,正如我所假设的,var_dump
应该输出312
(第一 - 分配,第二 - 逻辑比较)。但结果不同,我得到123
(首先 - 检查是否$var
转换为true
,第二个 - 如果没有,则赋值)。
问题是它是如何运作的?
为什么行为是相同的or
and ||
?
您可以在以下位置查看有关此行为的示例逻辑运算符 http://www.php.net/manual/en/language.operators.logical.php
您还可以阅读有关的文章短路评估 http://en.wikipedia.org/wiki/Short-circuit_evaluation
短路表达式x Sand y
(使用 Sand 来表示短路品种)相当于条件表达式if x then y else false;
表达方式x Sor y
相当于if x then true else y
.
In php.
return x() and y();
equal to
if (x())
return (bool)y();
else
return false;
return x() or y();
equal to
if (x())
return true;
else
return (bool)y();
因此,交易不仅仅是优先事项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)