5

可能重复:
“AND”与“&&”作为运算符

很抱歉这个非常基本的问题,但我一周前才开始学习 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

我读过&&/并且是一样的。两者的结果有何不同?请问有人能说出真正的原因吗?

4

3 回答 3

15

原因是运算符优先级。在您使用的三个运算符中&&and& =,优先顺序是

  • &&
  • =
  • and

因此$a,在您的程序中按预期计算但对于$b, 语句$b = isset($one)首先计算,给出了意想不到的结果。它可以固定如下。

$b = (isset($one) and isset($two));
于 2012-09-04T17:30:02.170 回答
1

这就是操作员分组的方式

$one = true;
$two = null;
$a = (isset($one) && isset($two));
($b = isset($one)) and isset($two);

echo $a.'<br>';
echo $b;

这就是为什么它的第一个返回 false 而第二个返回 true 的原因。

于 2012-09-04T17:31:06.010 回答
0

请参阅: http ://www.php.net/manual/en/language.operators.logical.php

它解释了“and”与“&&”的不同之处在于操作顺序不同。在这种情况下,分配首先发生。因此,如果您要这样做:

$b = (isset($one) and isset($two));

你最终会得到预期的结果。

于 2012-09-04T17:30:03.757 回答