PHP:
$a = 2;
$b = 3;
if($b=1 && $a=5)
{
$a++;
$b++;
}
echo $a.'-'.$b;
$a = 2;
$b = 3;
if($a=5 and $b=1)
{
$a++;
$b++;
}
echo $a.'-'.$b;
输出6-16-2
。我不明白这里的1
。
Perl:
$a = 2;
$b = 3;
if($b=1 && $a=5)
{
$a++;
$b++;
}
print $a.'-'.$b;
$a = 2;
$b = 3;
if($a=5 and $b=1)
{
$a++;
$b++;
}
print $a.'-'.$b;
输出6-66-2
,我不明白这里的第二个6
。
任何人都知道原因吗?
实际上我知道&&
的优先级高于and
,但我知道这一点后仍然有疑问。
更新
现在我理解PHP了,那个Perl会怎么样?
答案 0 :(得分:10)
关于Perl:
与PHP(但像Python,JavaScript等)不同,布尔运算符不返回布尔值,但使表达式为真(或最后一个值)的值确定最终结果表达式†(source)。
$b=1 && $a=5
评估为
$b = (1 && $a=5) // same as in PHP
与$b = (1 && 5)
相同(赋值“返回”指定的值)并将5
分配给$b
。
底线是:Perl和PHP中的运算符优先级相同(至少在这种情况下),但它们的不同之处在于布尔运算符返回的值。
FWIW,可以找到PHP的运算符优先级here。
更有趣的是(至少这对我来说是新的)是PHP不对增量/减量运算符执行类型转换。
因此,如果$b
为true
,那么$b++
会将值保留为true
,例如$b += 1
将2
分配给$b
。
†:我的意思是它返回第一个(最左边)值
false
的情况下,&&
在true
||
或表达式的最后一个值。
答案 1 :(得分:6)
第一个例子
$a = 2;
$b = 3;
if($b=1 && $a=5) // means $b = (1 && $a=5)
{
var_dump($b); //bool(true) because of &&
$a++;
$b++; //bool(true)++ ==true, ok
}
echo $a.'-'.$b;
希望你不会在生产中使用这些代码)
我是perl inob但我可以建议&& b返回a或b(如果所有这些都转换为bool,则返回最后一个),而不是布尔值,然后$ b =(1&& $ a = 5)返回$ b = 5(是5)
答案 2 :(得分:4)
这是问题所在:1&& 5在perl中返回5。如果将条件编码为if(($b=1) && ($a=5))
答案 3 :(得分:2)
Perl,图。 2:and
在perl中的优先级非常低,它不是&&
的同义词。因此,样本执行为(($a = 5) and ($b = 1))
,它将$ a和$ b分别设置为5和1,并返回最后一个参数的值(即1)。
在++之后你得到6-2。
答案 4 :(得分:0)