今天发现了一些有趣的代码片段。简化,它看起来像这样:
$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
和||
的行为相同?
答案 0 :(得分:3)
与
相同$var = null;
if(!$var)$var = '123';
if(!$var)$var = '321';
var_dump($var);
答案 1 :(得分:3)
您也可以阅读有关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();
所以,交易不仅仅是优先权。