我们都知道逻辑运算符的优先级比赋值运算符要高,php手册有明确的说明,但如果逻辑运算符和赋值运算符连用的时候,往往允许存在先进行赋值运算,然后在进行逻辑运算的顺序(手册如下:
Note:
尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的返回值被赋给了 $a。
)。上个题,看下:
1.
$a = '';
$b = 'at';
$c = 'yyb';
$res = $c && $pa = $b;
var_dump($res);
var_dump($pa);
结果分别为ture,'at'。这里其实相当于:$c && ($pa = $b)。赋值运算符进行了优先进行。
2 。 || 有短路运算。&&也有短路运算。
function A()
{
echo 'A';
return false;
}
function B()
{
echo 'B';
return true;
}
function C()
{
echo 'C';
return true;
}
if (A() && B() || C()) {
echo 'hao';
} else {
echo 'ye';
}
输出 AChao;这是&&的短路
3.&& 的优先级要高于 ||
还是上面的例子,调换一下&&和||
if (A() || B() && C()) {
echo 'hao';
} else {
echo 'ye';
}
输出 ABChao;求值顺序不变,都是从左至右,运算符优先级指定了两个表达式绑定得有多"紧密"。
再看一个运算符优先级的例子
$a = 1;
$b = 2;
$c = 5;
$k = $b*$a=$c;
echo $k;
输出10;赋值运算符和算术运算符结合时,规律和逻辑运算符一致。