很抱歉非常基本的问题,但我在一周前开始学习PHP&在google / stackoverflow上找不到这个问题的答案。
我经历了以下计划:
$one = true;
$two = null;
$a = isset($one) && isset($two);
$b = isset($one) and isset($two);
echo $a.'<br>';
echo $b;
它的输出是:
false
true
我读&amp;&amp; /并且是相同的。两者的结果有何不同?有人能说出真正的理由吗?
答案 0 :(得分:14)
原因是operator precedence。您使用&&
,and
&amp; =
,优先顺序为
&&
=
and
您的计划中的$a
按预期计算,但对于$b
,首先计算语句$b = isset($one)
,给出意外结果。它可以修复如下。
$b = (isset($one) and isset($two));
答案 1 :(得分:1)
这是如何进行运营商分组的
$one = true;
$two = null;
$a = (isset($one) && isset($two));
($b = isset($one)) and isset($two);
echo $a.'<br>';
echo $b;
这就是为什么它首先返回false而第二次返回true。
答案 2 :(得分:0)
请参阅: http://www.php.net/manual/en/language.operators.logical.php
它解释说“和”与“&amp;&amp;”不同因为操作顺序不同。在这种情况下,首先进行分配。所以,如果你这样做:
$b = (isset($one) and isset($two));
你最终得到了预期的结果。