if($y=3){echo $y;}
和if($y=1 and $y>2){echo $y;}
按预期工作。但是,我想知道为什么不能使用返回if($x=1 && $x>3){echo $x;}
的{{1}}。 (Notice: Undefined variable: x
运算符的优先级高于and
)如果&&
首先计算正确的操作数,那么评估后左手不应该有效吗?
答案 0 :(得分:0)
$y=1 and $y>2
按预期工作,因为:根据operator precedence规则,=
的优先级高于and
。因此,它评估为:
($y = 1) $y>2
所以,分配发生了。 (括号内的表达式首先计算)
$x=1 && $x>3
无法正常工作,因为:根据operator precedence规则,&&
的优先级高于=
。因此,它评估为:
$x=(1 && $x)>3
当然,$x
与最初未声明的1
进行比较。因此弹出undefined variable
错误。因此,如果要更改顺序,请将表达式更改为:
($x=3) && $x>2
所以你的if
会是这样的:
if(($x=3) && $x>2) {
echo $x;
}
答案 1 :(得分:0)
if($y=1 and $y>2){echo $y;}
" ="赋值运算符的优先级高于"和"。
" ="赋值运算符初始化$ y并按预期工作。
if($x=1 && $x>3){echo $x;}
" ="赋值运算符的优先级低于"&&"。
"&安培;&安培;"运算符在赋值之前执行,因此在这种情况下$ x未定义/初始化并返回通知:未定义变量:x。