Зачем мне скобки для простого выражения? - PullRequest
0 голосов
/ 18 февраля 2019

Зачем мне скобки для добавления $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 голосов
/ 18 февраля 2019

Как упоминалось kenzotenma , "потому что вы хотите typecast (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); 
?>
0 голосов
/ 18 февраля 2019

Без () вокруг $a + $b код интерпретируется как

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

, поскольку приоритет оператора (int) выше, чем у + (см. Руководство ), который в этом случае будет

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

Несмотря на то, что первое значение в этом выражении является целым числом, поскольку второе - это число с плавающей запятой, PHP выполнит жонглирование типа и также преобразовать первое значение в число с плавающей запятой, поэтому результатом выражения является число с плавающей запятой, которое не может быть возвращено addNumbers, поскольку объявлено, что оно возвращает int.

Byесли вставить (), выражение интерпретируется как

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

, которое можно вернуть.

...