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呢?
关于Perl:
与PHP(但与Python、JavaScript等类似(不同,布尔运算符不返回布尔值,但
$b=1 && $a=5
被评估为
$b = (1 && $a=5) // same as in PHP
与CCD_ 7相同(赋值"返回"赋值(,并将CCD_。
底线是:Perl和PHP中的运算符优先级是相同的(至少在本例中是这样(,但布尔运算符返回的值不同。
FWIW,PHP的运算符优先级可以在这里找到。
更有趣的是(至少这对我来说是新的(PHP不执行递增/递减运算符的类型转换。
因此,如果$b
是true
,则$b++
将该值保留为true
,而例如$b += 1
将2
分配给$b
。
†:我的意思是,它返回
- 在
&&
的情况下评估为false
- 在
||
的情况下评估为true
或表达式的最后一个值。
第一个示例
$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,但我可以建议使用&;b返回a或b(如果它们都转换为bool,则返回最后一个(,而不是布尔值,则$b=(1&&$a=5(返回$b=5(is 5(
问题是:1&;5在perl中返回5。如果将条件编码为if(($b=1) && ($a=5))
对于Perl,图2:and
在Perl中的优先级非常低,它不是&&
的同义词。因此,样本作为(($a = 5) and ($b = 1))
执行,CCD_24将$a和$b分别设置为5和1,并返回最后一个参数的值(即1(。
++之后,你会得到6-2。
请参阅http://sillythingsthatmatter.in/PHP/operators.php例如