【问题标题】:Why do I need brackets for simple expression?为什么我需要括号来简单表达?
【发布时间】:2019-02-18 07:21:39
【问题描述】:

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

【问题讨论】:

  • 什么语法给你错误?
  • 因为你想对 a + b 的结果进行类型转换,而不仅仅是 a
  • 这个表达式return (int)($a + $b); 意味着你想要返回一个整数(int),它将是$a+$b ($a+$b) 的乘积。

标签: php brackets


【解决方案1】:

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

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

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

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

即使这个表达式的第一个值是一个整数,因为第二个是一个浮点数,PHP 会执行type juggling 并将第一个值转换为浮点数,因此表达式的结果是一个浮点数点号,addNumbers 无法返回,因为它被声明为返回 int

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

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

可以退货。

【讨论】:

    【解决方案2】:

    正如 kenzotenma 所提到的,“因为你想对 $a + $b 的结果进行类型转换 (int) 而不仅仅是 $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); 
    ?>
    

    【讨论】:

    • 好的。谢谢大家的回复。代码 sn-p 来自 w3schools,它并不总是很详细。有没有更好的在线资源可以建议从头开始学习 PHP,因为我不想继续,直到我牢牢掌握基础知识?
    • @trebleclef 看看这里stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 2017-11-07
    • 2014-12-23
    • 2021-06-06
    • 2019-04-17
    • 2014-06-20
    • 2019-10-27
    • 1970-01-01
    相关资源
    最近更新 更多