Perl和PHP中的运算符优先级问题

Je *_*Rog 8 php perl operator-precedence

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;
Run Code Online (Sandbox Code Playgroud)

输出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;
Run Code Online (Sandbox Code Playgroud)

输出6-66-2,我不明白6这里的第二个.

谁知道原因?

实际上我知道&&它的优先级高于and,但我在掌握之前仍然有疑问.

UPDATE

现在我理解PHP了,那个Perl怎么样?

Fel*_*ing 10

关于Perl:

与PHP(但像Python,JavaScript等)不同,布尔运算符不返回布尔值,而是返回值 使表达式为true(或最后一个值)确定表达式(来源)的最终结果.

$b=1 && $a=5
Run Code Online (Sandbox Code Playgroud)

被评估为

$b = (1 && $a=5) // same as in PHP
Run Code Online (Sandbox Code Playgroud)

这与 $b = (1 && 5)(赋值"返回"指定的值)相同并分配5$b.


底线是:Perl和PHP中的运算符优先级相同(至少在这种情况下),但它们的不同之处在于布尔运算符返回的值.

FWIW,PHP的运算符优先级可以在这里找到.


更有趣的是(至少这对我来说是新的)是PHP不对递增/递减运算符执行类型转换.

所以,如果$btrue,那么$b++叶值true,而如$b += 1分配2$b.


†:我的意思是它返回第一个(最左边)的值

  • false在以下情况下进行评估&&
  • true在以下情况下进行评估||

或表达式的最后一个值.


Ria*_*iaD 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;
Run Code Online (Sandbox Code Playgroud)

希望你不要在生产中使用这些代码)

我是perl中的noob,但我可以建议&& b返回a或b(如果所有这些都转换为bool,则返回最后一个),而不是布尔值,然后$ b =(1 && $ a = 5)返回$ b = 5(是5)