为什么我需要方括号才能表达简单?

时间:2019-02-18 07:21:40

标签: php brackets

为什么需要括号在下面添加$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没有被括号包围,为什么会引发错误?这可能是一个简单的问题,但学习材料通常并不能解释细节。任何清晰度将不胜感激。

2 个答案:

答案 0 :(得分:6)

()周围没有$a + $b的情况下,代码被解释为

return ((int)$a) + $b;

因为(int)的运算符优先级高于+的运算符优先级(请参阅manual),在这种情况下为

((int)1.2) + 5.2
=>
1 + 5.2
=>
6.2

即使此表达式中的第一个值是一个int值,由于第二个值是浮点数,PHP也会执行type juggling并将第一个值也转换为浮点数,因此表达式的结果为浮点数,addNumbers不能返回,因为它声明要返回int

通过放入(),将表达式解释为

(int)(1.2+5.2)
=>
(int)6.4
=>
6

可以返回。

答案 1 :(得分:1)

正如 kenzotenma 所述,“因为您想强制转换(int)$a + $b的结果,而不仅仅是$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); 
?>