PHP的or
是一个奇怪的关键字。以下是一个代码片段,让我感到困惑:
echo 0 or 1; // prints 1
$foo = (0 or 1);
echo $foo; // prints 1
$foo = 0 or 1;
echo $foo; // prints 0 for some reason
为什么最后一个输出为0而不是1?
PHP的or
是一个奇怪的关键字。以下是一个代码片段,让我感到困惑:
echo 0 or 1; // prints 1
$foo = (0 or 1);
echo $foo; // prints 1
$foo = 0 or 1;
echo $foo; // prints 0 for some reason
($foo = 0) or 1;
||
运算符的优先级不同。如果您使用
$foo = 0 ||1;
它将按照您的预期工作。
请查看逻辑运算符手册
$foo = (0 or 1);
。 - Treffynnonor
的优先级低于=
。如果你使用||
,那么你就是正确的。 - nico $foo = 0 or 1;
// is same as
($foo = 0) or 1;
// because or has lower precedence than =
$foo = 0 || 1;
// is same as
$foo = (0 || 1);
// because || has higher precedence than =
// where is this useful? here:
$result = mysql_query() or die(mysql_error());
// displays error on failed mysql_query.
// I don't like it, but it's okay for debugging whilst development.
这段代码是 ($foo = 0) or 1;
。 or
的 运算符优先级 比 =
低。
在这种情况下,你应该使用 ||
,因为它的优先级比 =
高,因此将按照你的预期进行评估。
如果我没记错,赋值运算符 (=
) 的优先级比 or
高。因此,最后一行会被解释为:
($foo = 0) or 1;
这是一个将0赋值给$foo
,但返回1的语句。第一条语句被解释为:
echo(0 or 1);
一个这样的代码会打印出1。
运算顺序。单词“or”的优先级比相应的“||”低得多。甚至比赋值运算符还要低。因此,首先进行赋值操作,而赋值的值是“or”的第一个操作数。
“or”更适合用于流程控制而不是逻辑运算。它让你可以这样说:
$x = get_something() or die("Couldn't do it!");