PHP运算符差异&&;以及“;和“;


PHP operator difference && and "and"

可能重复:
';和';vs'&amp';作为操作员

很抱歉有一个非常基本的问题,但我一周前才开始学习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/并且是相同的。他们两人的结果有何不同?有人能说出真正的原因吗?

原因是运算符优先级。在使用&&and&=,优先顺序为

  • &&
  • =
  • and

所以程序中的$a是按预期计算的,但对于$b,语句$b = isset($one)是先计算的,给出了意外的结果。可以按如下方式进行修复。

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

这就是对操作员进行分组的方式

$one = true;
$two = null;
$a = (isset($one) && isset($two));
($b = isset($one)) and isset($two);
echo $a.'<br>';
echo $b;

这就是为什么它第一次返回false,第二次返回true。

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

它解释说,"answers"与"&&"的不同之处在于操作的顺序不同。在这种情况下,分配首先发生。所以,如果你要做:

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

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