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不对递增/递减运算符执行类型转换.
所以,如果$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;
Run Code Online (Sandbox Code Playgroud)
希望你不要在生产中使用这些代码)
我是perl中的noob,但我可以建议&& b返回a或b(如果所有这些都转换为bool,则返回最后一个),而不是布尔值,然后$ b =(1 && $ a = 5)返回$ b = 5(是5)