PHP逻辑运算符优先级奇怪地影响变量赋值结果
$var4 = 123;
function fn1($p1)
{
return array('p1' => 1, 'p2' => 2);
}
if ($var1 = fn1(1) AND $var4 == 123)
{
print_r($var1);
}
if ($var2 = fn1(1) && $var4 == 123)
{
print_r($var2);
}
if (($var3 = fn1(1)) && $var4 == 123)
{
print_r($var3);
}
任何人都可以解释为什么这种奇怪的行为? php.net的参考链接将不胜感激。
我知道'&&'的优先级高于'AND',但这并不能解释给我!
PHP:运算符优先
&&具有比=更高的优先级,因此在第二种情况下,您将fn1(1) && $var4 == 123
(true或false)的值分配给$ var2。
在第一个if中,AND优先级低于=,因此首先进行赋值,然后比较结果。
在第三个if中,由于所有parens中的所有内容都先被处理,所以分配再次发生。
&&
比=
有更高的优先级,所以真正发生的事情更像是:
if ($var1 = (fn(1) && $var4 == 123))
那么真正被分配给$ var1的是布尔结果,这就是为什么你得到1。
PHP的AND
和&&
操作符都是逻辑和,但是and
版本的绑定优先级较低,请参阅:http://php.net/manual/en/language.operators.precedence.php
上一篇: PHP Logical Operators precedence affects variable assignment results strangely