为什么简单的表达需要括号?

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); 
?>