为什么简单的表达需要括号?
Why do I need brackets for simple expression?
下面为什么要加括号$a + $b
:
<?php declare(strict_types=1);
function addNumbers(float $a, float $b) : int {
return (int)($a + $b);
}
echo addNumbers(1.2, 5.2);
?>
在这种情况下使用括号让我很困惑。如果 $a + $b
没有被方括号括起来,为什么会抛出错误?这可能是一个简单的问题,但研究 material 通常不会解释细节。任何清晰度将不胜感激。
如果 $a + $b
周围没有 ()
,代码将被解释为
return ((int)$a) + $b;
因为 (int)
的运算符优先级高于 +
(参见 manual),在本例中为
((int)1.2) + 5.2
=>
1 + 5.2
=>
6.2
即使此表达式中的第一个值是 int,因为第二个是浮点数,PHP 将执行 type juggling 并将第一个值也转换为 float,因此表达式的结果是一个浮点数,它不能被 addNumbers
编辑,因为它被声明为 return 和 int
.
通过将 ()
放入,表达式被解释为
(int)(1.2+5.2)
=>
(int)6.4
=>
6
可以return编辑。
如kenzotenma所述,"because you wanna typecast (int) the result of $a + $b
and not just $a
"
像下面这样没有括号的尝试,
<?php declare(strict_types=1);
function addNumbers(float $a, float $b) : int {
$result = $a + $b;
return (int)$result ;
}
echo addNumbers(1.2, 5.2);
?>
下面为什么要加括号$a + $b
:
<?php declare(strict_types=1);
function addNumbers(float $a, float $b) : int {
return (int)($a + $b);
}
echo addNumbers(1.2, 5.2);
?>
在这种情况下使用括号让我很困惑。如果 $a + $b
没有被方括号括起来,为什么会抛出错误?这可能是一个简单的问题,但研究 material 通常不会解释细节。任何清晰度将不胜感激。
如果 $a + $b
周围没有 ()
,代码将被解释为
return ((int)$a) + $b;
因为 (int)
的运算符优先级高于 +
(参见 manual),在本例中为
((int)1.2) + 5.2
=>
1 + 5.2
=>
6.2
即使此表达式中的第一个值是 int,因为第二个是浮点数,PHP 将执行 type juggling 并将第一个值也转换为 float,因此表达式的结果是一个浮点数,它不能被 addNumbers
编辑,因为它被声明为 return 和 int
.
通过将 ()
放入,表达式被解释为
(int)(1.2+5.2)
=>
(int)6.4
=>
6
可以return编辑。
如kenzotenma所述,"because you wanna typecast (int) the result of $a + $b
and not just $a
"
像下面这样没有括号的尝试,
<?php declare(strict_types=1);
function addNumbers(float $a, float $b) : int {
$result = $a + $b;
return (int)$result ;
}
echo addNumbers(1.2, 5.2);
?>