【发布时间】:2012-02-12 11:05:59
【问题描述】:
$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);
}
- 如果你运行这个简单的脚本,它会输出奇怪的结果,在 至少对我来说!!第一个 if 表达式的第一个输出将导致 从函数返回的数组并分配给 $var1 变量,这是我所期待的,嗯?
- 第二个输出如果表达式将产生一个整数 '1' 分配给 $var2 变量,这根本不是预期的! 请注意,唯一改变的是逻辑运算符, 我用的是'&&'而不是'AND',就是这样!!
- 第三个 if 表达式的第三个输出将再次产生预期的结果 从函数返回的数组并分配给 $var3 变量, 与第一个 if 表达式完全一样,但请稍等:我刚刚接受了 if 表达式中括号内的赋值语句,while 仍在使用第二个 if 表达式代码!!
谁能从技术上详细解释为什么会出现这种奇怪的行为? php.net 参考链接将不胜感激。
我知道 '&&' 的优先级高于 'AND' 但这并没有向我解释!!
【问题讨论】:
标签: php variable-assignment logical-operators operator-precedence