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