2

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

$var = null;

$var or $var = '123';

$var or $var = '312';

var_dump($var);

问题是,据我所知,分配的优先级高于OR,因此,正如我假设的那样,var_dump应该输出312(第一个 - 分配,第二个 - 逻辑比较)。但结果是不同的,我得到123(首先 - 检查是否$var转换为true,其次 - 如果不是,分配值)。

问题是它是如何工作的?

or为什么和的行为相同||

4

2 回答 2

3

它与

$var = null;

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

var_dump($var);
于 2013-04-05T13:58:05.333 回答
3

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

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

短路表达式x Sand y(使用 Sand 表示短路变体)等价于表达式等价于 的if x then y else false;条件x Sor y表达式if x then true else y

在 php.ini 中。

return x() and y();

等于

if (x())
  return (bool)y();
else
  return false;

return x() or y();

等于

if (x())
  return true;
else
  return (bool)y();

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

于 2013-04-05T14:05:01.407 回答